合并节点中的PDF

时间:2016-12-12 12:53:30

标签: javascript node.js pdf

您好我正在尝试合并总计 n 的pdf,但我无法让它发挥作用。

我正在使用Buffer模块来连接pdf,但它只将最后一个pdf应用到最终的pdf中。

这在节点中甚至可以做吗?

var pdf1 = fs.readFileSync('./test1.pdf');
var pdf2 = fs.readFileSync('./test2.pdf');

fs.writeFile("./final_pdf.pdf", Buffer.concat([pdf1, pdf2]), function(err) {
    if(err) {
        return console.log(err);
    }

    console.log("The file was saved!");
});

目前有一些库,但它们都依赖于其他软件或编程语言。

3 个答案:

答案 0 :(得分:8)

当您Buffer.concat([pdf1, pdf2])时,您期望得到什么?只需连接两个PDF文件,就不会得到包含所有页面的文件。 PDF是一种复杂的格式(基本上是一种用于矢量图形)。如果您刚刚添加了两个JPEG文件,那么您不希望获得包含两张图片的大图像,是吗?

您需要使用外部库。 https://github.com/wubzz/pdf-merge可能会起作用。

答案 1 :(得分:5)

HummusJS是另一个PDF操作库,但不依赖于PDFtk。有关在缓冲区中合并PDF的示例,请参阅this answer

答案 2 :(得分:0)

Aspose.PDF Cloud SDK for Node.js 可以在不依赖任何第三方 API/工具的情况下合并/组合 pdf 文档。但是,目前,它适用于云存储(Aspose Internal Storage、Amazon S3、DropBox、Google Drive Storage、Google Cloud Storage、Windows Azure Storage、FTP Storage)。在不久的将来,我们将提供从请求正文(流)合并文件的支持。


const { PdfApi } = require("asposepdfcloud");
const { MergeDocuments }= require("asposepdfcloud/src/models/mergeDocuments");
var fs = require('fs');

pdfApi = new PdfApi("xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx", "xxxxxxxxxxxxxxxxxxxxx");

const file1 = "dummy.pdf";
const file2 = "02_pages.pdf";
const localTestDataFolder = "C:\\Temp";

const names = [file1, file2];
const resultName = "MergingResult.pdf";
const mergeDocuments = new MergeDocuments();
mergeDocuments.list = []; 
names.forEach( (file) => {
        mergeDocuments.list.push(file);
    });


// Upload File
pdfApi.uploadFile(file1, fs.readFileSync(localTestDataFolder + "\\" + file1)).then((result) => {  
                     console.log("Uploaded File");    
                    }).catch(function(err) {
    // Deal with an error
    console.log(err);
});

// Upload File
pdfApi.uploadFile(file2, fs.readFileSync(localTestDataFolder + "\\" + file2)).then((result) => {  
                     console.log("Uploaded File");    
                    }).catch(function(err) {
    // Deal with an error
    console.log(err);
});


// Merge PDF documents
pdfApi.putMergeDocuments(resultName, mergeDocuments, null, null).then((result) => {    
    console.log(result.body.code);    
}).catch(function(err) {
    // Deal with an error
    console.log(err);
});

//Download file
const outputPath = "C:/Temp/" + resultName;

pdfApi.downloadFile(outputPath).then((result) => {    
    fs.writeFileSync(localPath, result.body);
    console.log("File Downloaded");    
}).catch(function(err) {
    // Deal with an error
    console.log(err);
});