您好我正在尝试合并总计 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!");
});
目前有一些库,但它们都依赖于其他软件或编程语言。
答案 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);
});