前言

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内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部