在Node中合并PDF文件

8

你好,我正在尝试合并总数为n的PDF文件,但是无法成功。

我正在使用Buffer模块来连接这些PDF文件,但是只有最后一个PDF文件被应用到了最终的PDF文件中。

在Node.js中是否可能实现这个功能呢?

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个回答

19
当你执行Buffer.concat([pdf1, pdf2])时,你希望得到什么?仅仅将两个PDF文件串联在一起并不会得到一个包含所有页面的PDF文件。 PDF是一个复杂的格式(基本上是矢量图形格式)。如果你只添加了两个JPEG文件,你也不会期望得到一个包含两张图片的大图像,对吧?
你需要使用外部库。例如,https://github.com/wubzz/pdf-merge就可以胜任此项任务。

8

HummusJS 是另一个PDF操作库,但不依赖于PDFtk。请参见此答案,了解在缓冲区中组合PDF的示例。


1
这对于那些使用Firebase等不允许安装PDFtk的服务的人来说非常重要。 - Gabriel Garrett
能否合并7个PDF文件? - Daud khan
5
HummusJS现在不再受支持。预编译二进制文件已经失踪了,而且我第一次尝试无法运行它。 - phil294

0

Aspose.PDF Cloud SDK for Node.js 可以合并/组合 PDF 文档,而不依赖于任何第三方 API/工具。然而,目前它只能与云存储(Aspose 内部存储、Amazon S3、DropBox、Google Drive 存储、Google Cloud 存储、Windows Azure 存储、FTP 存储)一起使用。在不久的将来,我们将提供支持从请求体(流)中合并文件。


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);
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接