使用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-webkit 不支持html5播放mp4视频的方法

    解决node-webkit 不支持html5播放mp4视频的方法

    本文给大家分享的是解决node-webkit 不支持html5播放mp4视频的方法,其原因大概是因为node-webkit没有购买mp4格式的专利授权,恩,我们来想个办法来解决这个事情吧。
    2015-03-03
  • 使用 Node.js 操作 SQLite的方法

    使用 Node.js 操作 SQLite的方法

    SQLite是一个轻量级的嵌入式关系型数据库,适合小型项目、原型开发和本地数据存储,在 Node.js 中使用 SQLite 非常方便,常用的第三方库,本文给大家介绍使用Node.js操作SQLite的方法,感兴趣的朋友一起看看吧
    2025-09-09
  • Node.js 使用 gRPC从定义到实现过程详解

    Node.js 使用 gRPC从定义到实现过程详解

    gRPC是一个高性能、开源的远程过程调用(RPC)框架,由 Google 开发,它支持多种编程语言,旨在简化和优化分布式系统中的服务通信,本文给大家介绍Node.js 使用 gRPC从定义到实现过程,感兴趣的朋友跟随小编一起看看吧
    2024-07-07
  • Nodejs调用Dll模块的方法

    Nodejs调用Dll模块的方法

    这篇文章主要介绍了Nodejs调用Dll模块的方法,在文中给大家提到了nodejs通过ffi调用dll模块的代码,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • 前端+nodejs+mysql实现前后端联通的完整代码

    前端+nodejs+mysql实现前后端联通的完整代码

    Node.js主要属于后端技术,但也可以用于前端开发的某些场景,下面这篇文章主要介绍了前端+nodejs+mysql实现前后端联通的完整代码,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-04-04
  • Node.js中child_process实现多进程

    Node.js中child_process实现多进程

    这篇文章主要介绍了Node.js中child_process实现多进程,需要的朋友可以参考下
    2015-02-02
  • Node.js 路由的实现方法

    Node.js 路由的实现方法

    这篇文章主要介绍了Node.js 路由的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • nodejs配置express服务器运行自动打开浏览器详细步骤

    nodejs配置express服务器运行自动打开浏览器详细步骤

    在nodejs中使用express来搭建框架可以说是非常的简单方便,下面这篇文章主要给大家介绍了关于nodejs配置express服务器运行自动打开浏览器的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • npx的使用及原理分析

    npx的使用及原理分析

    这篇文章主要介绍了npx的使用及原理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • Node.js系列之安装配置与基本使用(1)

    Node.js系列之安装配置与基本使用(1)

    这篇文章主要为大家详细介绍了Node.js系列之安装配置与基本使用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08

最新评论