使用Nodejs编写一个脚本实现markdown转pdf功能

 更新时间:2024年05月14日 08:29:21   作者:Moment  
Markdown 是一种轻量级的标记语言,非常适合用来写作和记录,将 Markdown 转换为 PDF 可以让文档在格式和样式上更加统一,也方便在不同设备和平台上查看和打印,在接下来的内容中我们将讲解如何使用 NodeJs 编写一个 Markdown 转 PDF 的脚本来实现我们这个想要的功能

前言

Markdown 是一种轻量级的标记语言,非常适合用来写作和记录,但并不是所有人都习惯或能够直接阅读 Markdown 文件。将 Markdown 转换为 PDF 可以让文档在格式和样式上更加统一,也方便在不同设备和平台上查看和打印,方便分享给不熟悉 Markdown 的用户。

在接下来的内容中我们将讲解如何使用 NodeJs 编写一个 Markdown 转 PDF 的脚本来实现我们这个想要的功能。

实现

首先我们来明确一下我们的需求,我们目前的情况是主需要读取内容,暂时还不需要读取样式什么的,但是我们还需要将 Markdown 里的图片链接在 pdf 里能直接显示。

我们需要安装 markdown-pdf 来实现文档转换,使用 node-fetch 来实现下载图片,并将图片展现在 pdf 上。

pnpm add markdown-pdf node-fetch

node-fetch 是一个轻量级的模块,提供了一个类似于浏览器原生 fetch API 的接口,用于在 Node.js 环境中发起 HTTP 请求。这个库主要被设计用来使服务器端的代码能够以一种与前端开发者熟悉的方式来进行网络请求。

接下来我们将编写一个简单的 NodeJs 脚本,并读取 markdown 文件,下载其中的图片,并将其转换为 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 转换为 PDF
async function markdownToPdf(inputFile, pdfFile) {
  const tempFile = "moment.md";
  await prepareMarkdown(inputFile, tempFile);
  markdownPdf()
    .from(tempFile)
    .to(pdfFile, () => {
      console.log("PDF 创建成功");

      fs.unlinkSync(tempFile);
    });
}

markdownToPdf("./如何将 NestJs 应用部署到 vercel.md", "./moment.pdf");

在上面的这些代码中,首先使用正则表达式 regex 匹配 Markdown 文件中的图片链接格式 ![xxx](url)。此正则表达式将捕获 Markdown 图片的 URL。

从 url 中解析文件名,创建本地存储路径,检查图片是否下载,如果没有下载则使用 fetch 获取图片内容保存到本地,并将图片路径写入到临时路径文件 outputFile。

之后将调用我们的 markdown-pdf 库来实现 markdown 转 pdf。

这个时候在我们终端中执行如下命令:

node index.js

最终执行效果如下图所示:

它给我创建了一个 images 路径,用于存放我们刚才下载到的图片,也为我们创建了一个 pdf 文件,它的最终效果如下图所示:

图片和我们编写的内容都能正常显示,那如果要给我们的内容中添加一些样式就非常好看了。

总结

通过上面的内容我们实现了一个 markdown 转 pdf 的过程,之后如果真的有需要的话,可以加入一些样式之类的,让我们的外观变得好看,我们也可以编写好一些 css 样式,让他成为我们编写简历的神器

到此这篇关于使用Nodejs编写一个脚本实现markdown转pdf功能的文章就介绍到这了,更多相关Nodejs markdown转pdf内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅谈如何把Node项目部署到服务器上

    浅谈如何把Node项目部署到服务器上

    本文主要介绍了浅谈如何把Node项目部署到服务器上,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • node打造微信个人号机器人的方法示例

    node打造微信个人号机器人的方法示例

    这篇文章主要介绍了node打造微信个人号机器人的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • Node.js应用设置安全的沙箱环境

    Node.js应用设置安全的沙箱环境

    这篇文章主要介绍了Node.js应用设置安全的沙箱环境的方法以及注意事项,对此有需要的朋友可以参考学习下。
    2018-04-04
  • 利用adb shell和node.js实现抖音抢红包功能(推荐)

    利用adb shell和node.js实现抖音抢红包功能(推荐)

    这篇文章主要介绍了利用adb shell和node.js实现抖音抢红包功能,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-02-02
  • Node.js中DNS模块学习总结

    Node.js中DNS模块学习总结

    本篇文章给大家详细介绍了Node.js中DNS模块的相关知识点,以及相关的实例代码做了分享,有兴趣的朋友参考下。
    2018-02-02
  • node.js集成百度UE编辑器

    node.js集成百度UE编辑器

    这篇文章主要介绍了node.js集成百度UE编辑器的方法,需要的朋友可以参考下
    2015-02-02
  • 在 Node.js 中使用 async 函数的方法

    在 Node.js 中使用 async 函数的方法

    利用 async 函数,你可以把基于 Promise 的异步代码写得就像同步代码一样。一旦你使用 async 关键字来定义了一个函数,那你就可以在这个函数内使用 await 关键字。下面通过本文给大家分享Node.js 中使用 async 函数的方法,一起看看吧
    2017-11-11
  • 详解如何使用node.js的开发框架express创建一个web应用

    详解如何使用node.js的开发框架express创建一个web应用

    这篇文章主要介绍了详解如何使用node.js的开发框架express创建一个web应用,网上各种搜索后,整理了下快速搭建express框架的步骤。非常具有实用价值,需要的朋友可以参考下
    2018-12-12
  • 命令行批量截图Node脚本示例代码

    命令行批量截图Node脚本示例代码

    这篇文章主要给大家介绍了关于命令行批量截图Node脚本的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-01-01
  • nodejs+express搭建多人聊天室步骤

    nodejs+express搭建多人聊天室步骤

    本篇文章给大家详细讲解了nodejs+express搭建一个简易的多人聊天室的详细步骤,有兴趣的朋友学习下。
    2018-02-02

最新评论