node.js - Node JS : Merge two PDF files into one using the buffer obtained by reading them

标签 node.js pdf npm

我正在使用 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

所以我想给你两个解决方案。

  1. 使用 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 库的解决方案。

  2. 使用 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/

相关文章:

node.js - 在 debian 中安装 Node js 时出错

Node.js 应用程序在部署到 Heroku 时崩溃

javascript - Java 中的 Deflate、Javascript 中的 Inflate、Z_DATA_ERROR

javascript - 如何在运行 karma 时修复 "There is no server listening on port 9876"错误?

node.js - 包含 ProxyPass 和 ProxyPassReverse 的正确位置(AWS Lightsail 上的 Bitnami Node.js 服务器)

java - 我无法通过 Java 在浏览器中打开 .pdf

python - 使用 Nodejs Consumer 减少命名管道 (fifo) 吞吐量

java - 将 PDF/A-1b 转换为 PDF/A-2

javascript - 使用 jsPDF 和邮件附件生成 PDF

node.js - 如何在 bash 中抑制 npm WARN 弃用消息