我正在使用 fill-pdf npm 模块来填充模板 pdf,它会创建从磁盘读取并作为缓冲区返回给回调的新文件。我有两个文件,我对其执行相同的操作。我想在那里合并两个缓冲区以形成一个可以发送回客户端的 pdf 文件。我尝试了不同的缓冲区连接方法。可以使用 Buffer.concat 连接缓冲区,例如,
var newBuffer = Buffer.concat([result_pdf.output, result_pdf_new.output]);
新缓冲区的大小也是输入缓冲区大小的总和。但是当 newBuffer
作为响应发送到客户端时,它仍然只显示数组中最后提到的文件。
res.type("application/pdf");
return res.send(buffer);
有什么想法吗?
最佳答案
正如@MechaCode 所述,创建者已停止支持 HummusJS
。
所以我想给你两个解决方案。
使用 node-pdftk npm 模块
以下示例代码使用
node-pdftk
npm 模块结合 两个 pdf 缓冲区无缝衔接。const pdftk = require('node-pdftk'); var pdfBuffer1 = fs.readFileSync("./pdf1.pdf"); var pdfBuffer2 = fs.readFileSync("./pdf2.pdf"); pdftk .input([pdfBuffer1, pdfBuffer2]) .output() .then(buf => { let path = 'merged.pdf'; fs.open(path, 'w', function (err, fd) { fs.write(fd, buf, 0, buf.length, null, function (err) { fs.close(fd, function () { console.log('wrote the file successfully'); }); }); }); });
node-pdftk npm 模块的要求是你需要安装 PDFtk 库。你们中的一些人可能会发现这种开销/乏味。所以我有另一个使用 pdf-lib 库的解决方案。
使用 pdf-lib npm 模块
const PDFDocument = require('pdf-lib').PDFDocument var pdfBuffer1 = fs.readFileSync("./pdf1.pdf"); var pdfBuffer2 = fs.readFileSync("./pdf2.pdf"); var pdfsToMerge = [pdfBuffer1, pdfBuffer2] const mergedPdf = await PDFDocument.create(); for (const pdfBytes of pdfsToMerge) { const pdf = await PDFDocument.load(pdfBytes); const copiedPages = await mergedPdf.copyPages(pdf, pdf.getPageIndices()); copiedPages.forEach((page) => { mergedPdf.addPage(page); }); } const buf = await mergedPdf.save(); // Uint8Array let path = 'merged.pdf'; fs.open(path, 'w', function (err, fd) { fs.write(fd, buf, 0, buf.length, null, function (err) { fs.close(fd, function () { console.log('wrote the file successfully'); }); }); });
我个人更喜欢使用 pdf-lib npm 模块。
关于node.js - Node JS : Merge two PDF files into one using the buffer obtained by reading them,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36766234/