安装依赖:
npm install markdown-it puppeteer
完整代码:
const fs = require("fs");
const md = require("markdown-it")();
const puppeteer = require("puppeteer");
export const mergeMdToPdf = (inputFiles: Array<any>, outputFile) => {
const tempFile = outputFile.replaceAll(".pdf", ".html"); // 临时文件名
// 生成临时 HTML 文件
let htmlContent = "";
for (let i = 0; i < inputFiles.length; i++) {
const content = fs.readFileSync(inputFiles[i]);
htmlContent += content.toString();
}
let htmlResult = md.render(htmlContent);
htmlResult = htmlResult.replaceAll("%5C", "/").replaceAll('<img src="', '<img src="file:/');
fs.writeFileSync(tempFile, htmlResult);
// 将 HTML 文件转换为 PDF 文件
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
//读取html文件,使用file协议,否则无法读取图片
await page.goto(`file://${tempFile}`, { waitUntil: "networkidle0" });
const pdfBuffer = await page.pdf(); // 将页面转换为PDF
fs.writeFileSync(outputFile, pdfBuffer); // 将PDF内容写入文件
await browser.close();
//删除临时文件
fs.unlink(tempFile, (err) => {
if (err) {
console.error(err);
return;
}
console.log("Temp file removed");
});
})();
};