欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Nodejs編寫一個腳本實(shí)現(xiàn)markdown轉(zhuǎn)pdf功能

 更新時間:2024年05月14日 08:29:21   作者:Moment  
Markdown?是一種輕量級的標(biāo)記語言,非常適合用來寫作和記錄,將?Markdown?轉(zhuǎn)換為?PDF?可以讓文檔在格式和樣式上更加統(tǒng)一,也方便在不同設(shè)備和平臺上查看和打印,在接下來的內(nèi)容中我們將講解如何使用?NodeJs?編寫一個?Markdown?轉(zhuǎn)?PDF?的腳本來實(shí)現(xiàn)我們這個想要的功能

前言

Markdown 是一種輕量級的標(biāo)記語言,非常適合用來寫作和記錄,但并不是所有人都習(xí)慣或能夠直接閱讀 Markdown 文件。將 Markdown 轉(zhuǎn)換為 PDF 可以讓文檔在格式和樣式上更加統(tǒng)一,也方便在不同設(shè)備和平臺上查看和打印,方便分享給不熟悉 Markdown 的用戶。

在接下來的內(nèi)容中我們將講解如何使用 NodeJs 編寫一個 Markdown 轉(zhuǎn) PDF 的腳本來實(shí)現(xiàn)我們這個想要的功能。

實(shí)現(xiàn)

首先我們來明確一下我們的需求,我們目前的情況是主需要讀取內(nèi)容,暫時還不需要讀取樣式什么的,但是我們還需要將 Markdown 里的圖片鏈接在 pdf 里能直接顯示。

我們需要安裝 markdown-pdf 來實(shí)現(xiàn)文檔轉(zhuǎn)換,使用 node-fetch 來實(shí)現(xiàn)下載圖片,并將圖片展現(xiàn)在 pdf 上。

pnpm add markdown-pdf node-fetch

node-fetch 是一個輕量級的模塊,提供了一個類似于瀏覽器原生 fetch API 的接口,用于在 Node.js 環(huán)境中發(fā)起 HTTP 請求。這個庫主要被設(shè)計用來使服務(wù)器端的代碼能夠以一種與前端開發(fā)者熟悉的方式來進(jìn)行網(wǎng)絡(luò)請求。

接下來我們將編寫一個簡單的 NodeJs 腳本,并讀取 markdown 文件,下載其中的圖片,并將其轉(zhuǎn)換為 PDF。

import fs from "fs";
import path from "path";
import fetch from "node-fetch";
import markdownPdf from "markdown-pdf";

async function prepareMarkdown(inputFile, outputFile) {
  let data = fs.readFileSync(inputFile, "utf8");
  const regex = /!\[.*?\]\((.*?)\)/g;
  let match;

  while ((match = regex.exec(data)) !== null) {
    const imageUrl = match[1];
    const imageName = path.basename(imageUrl);
    const imagePath = "./images/" + imageName;

    // 確保 images 目錄存在
    const directory = path.dirname(imagePath);
    if (!fs.existsSync(directory)) {
      fs.mkdirSync(directory, { recursive: true });
    }

    // 下載圖片,如果還未下載
    if (!fs.existsSync(imagePath)) {
      const response = await fetch(imageUrl);
      const buffer = Buffer.from(await response.arrayBuffer());
      fs.writeFileSync(imagePath, buffer);
    }

    // 替換 Markdown 中的圖片鏈接為本地路徑
    data = data.replace(imageUrl, imagePath);
  }

  // 將替換后的 Markdown 寫入到臨時文件
  fs.writeFileSync(outputFile, data);
}

// 將 Markdown 轉(zhuǎn)換為 PDF
async function markdownToPdf(inputFile, pdfFile) {
  const tempFile = "moment.md";
  await prepareMarkdown(inputFile, tempFile);
  markdownPdf()
    .from(tempFile)
    .to(pdfFile, () => {
      console.log("PDF 創(chuàng)建成功");

      fs.unlinkSync(tempFile);
    });
}

markdownToPdf("./如何將 NestJs 應(yīng)用部署到 vercel.md", "./moment.pdf");

在上面的這些代碼中,首先使用正則表達(dá)式 regex 匹配 Markdown 文件中的圖片鏈接格式 ![xxx](url)。此正則表達(dá)式將捕獲 Markdown 圖片的 URL。

從 url 中解析文件名,創(chuàng)建本地存儲路徑,檢查圖片是否下載,如果沒有下載則使用 fetch 獲取圖片內(nèi)容保存到本地,并將圖片路徑寫入到臨時路徑文件 outputFile。

之后將調(diào)用我們的 markdown-pdf 庫來實(shí)現(xiàn) markdown 轉(zhuǎn) pdf。

這個時候在我們終端中執(zhí)行如下命令:

node index.js

最終執(zhí)行效果如下圖所示:

它給我創(chuàng)建了一個 images 路徑,用于存放我們剛才下載到的圖片,也為我們創(chuàng)建了一個 pdf 文件,它的最終效果如下圖所示:

圖片和我們編寫的內(nèi)容都能正常顯示,那如果要給我們的內(nèi)容中添加一些樣式就非常好看了。

總結(jié)

通過上面的內(nèi)容我們實(shí)現(xiàn)了一個 markdown 轉(zhuǎn) pdf 的過程,之后如果真的有需要的話,可以加入一些樣式之類的,讓我們的外觀變得好看,我們也可以編寫好一些 css 樣式,讓他成為我們編寫簡歷的神器

到此這篇關(guān)于使用Nodejs編寫一個腳本實(shí)現(xiàn)markdown轉(zhuǎn)pdf功能的文章就介紹到這了,更多相關(guān)Nodejs markdown轉(zhuǎn)pdf內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Node.js中require的工作原理淺析

    Node.js中require的工作原理淺析

    這篇文章主要介紹了Node.js中require的工作原理淺析,通過分析node.js的源碼得到本文,需要的朋友可以參考下
    2014-06-06
  • node.js express框架簡介與實(shí)現(xiàn)

    node.js express框架簡介與實(shí)現(xiàn)

    這篇文章主要介紹了node.js express框架簡介與實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • Node.js入門筆記?之a(chǎn)sync模塊

    Node.js入門筆記?之a(chǎn)sync模塊

    這篇文章主要介紹了Node.js入門筆記?之a(chǎn)sync模塊,async是一個異步處理模塊,主要有三個方式:串行無關(guān)聯(lián)、并行無關(guān)聯(lián)?、串行有關(guān)聯(lián),文章圍繞主題展開更多的相關(guān)內(nèi)容,需要的小伙伴可以參考一下
    2022-06-06
  • 一文詳解Node.js服務(wù)器動態(tài)資源處理

    一文詳解Node.js服務(wù)器動態(tài)資源處理

    動態(tài)資源處理也就是對數(shù)據(jù)進(jìn)行重新排序來讀寫數(shù)據(jù)庫,讀取反序列化,寫入序列化,這篇文章主要來和大家聊聊Node.js中的服務(wù)器動態(tài)資源處理,感興趣的可以了解下
    2024-04-04
  • 解決npm?run?serve啟動報錯npm?ERR?Missing?script:"serve"

    解決npm?run?serve啟動報錯npm?ERR?Missing?script:"serve&q

    這篇文章主要給大家介紹了關(guān)于解決npm?run?serve啟動報錯npm?ERR?Missing?script:"serve"的相關(guān)資料,這是最近開發(fā)中遇到的一個問題,文中通過圖文將解決辦法介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • Node.js使用sharp庫實(shí)現(xiàn)PNG圖片轉(zhuǎn)換為WebP格式

    Node.js使用sharp庫實(shí)現(xiàn)PNG圖片轉(zhuǎn)換為WebP格式

    在 Node.js 中,可以使用 sharp 庫將 PNG 圖片轉(zhuǎn)換為 WebP 格式,sharp 是一個高性能的圖像處理庫,支持多種圖像格式的轉(zhuǎn)換和處理,以下是如何使用 sharp 將 PNG 圖片轉(zhuǎn)換為 WebP 的詳細(xì)步驟,需要的朋友可以參考下
    2024-12-12
  • nvm報錯Now?using?node?v版本號(64-bit)圖文解決方法

    nvm報錯Now?using?node?v版本號(64-bit)圖文解決方法

    這篇文章主要給大家介紹了關(guān)于nvm報錯Now?using?node?v版本號(64-bit)的解決方法,文中將解決的辦法介紹的非常詳細(xì),對遇到這個問題的朋友具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-11-11
  • node.js突破nginx防盜鏈機(jī)制,下載圖片案例分析

    node.js突破nginx防盜鏈機(jī)制,下載圖片案例分析

    這篇文章主要介紹了node.js突破nginx防盜鏈機(jī)制,下載圖片的方法,結(jié)合具體案例形式分析了防盜鏈的相關(guān)原理與node.js使用axios庫下載防盜鏈圖片的相關(guān)操作技巧,需要的朋友可以參考下
    2023-04-04
  • nodejs操作mysql實(shí)現(xiàn)增刪改查的實(shí)例

    nodejs操作mysql實(shí)現(xiàn)增刪改查的實(shí)例

    下面小編就為大家?guī)硪黄猲odejs操作mysql實(shí)現(xiàn)增刪改查的實(shí)例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • 一文帶你了解Node.js中的path模塊

    一文帶你了解Node.js中的path模塊

    Node.js和Python技術(shù)類似,?都致力于能夠?qū)崿F(xiàn)跨平臺的通用代碼。?為此,針對路徑的拼接,?Node.js提供了path模塊,本文就來講講path模塊的使用
    2023-03-03

最新評論