我正在使用fill-pdf npm模块来填充模板pdf并创建新文件,该文件从磁盘读取并作为缓冲区返回到回调.我有两个文件,我做同样的操作.我想将两个缓冲区组合在一起形成一个pdf文件,我可以将其发送回客户端.我尝试了不同的缓冲连接方法.可以使用Buffer.concat连接缓冲区,例如,
var newBuffer = Buffer.concat([result_pdf.output, result_pdf_new.output]);
Run Code Online (Sandbox Code Playgroud)
新缓冲区的大小也是输入缓冲区大小的总和.但是当newBuffer作为响应发送到客户端时,它仍然只显示数组中最后提到的文件.
res.type("application/pdf");
return res.send(buffer);
Run Code Online (Sandbox Code Playgroud)
任何的想法 ?
Pan*_*nde 19
正如@MechaCode 所提到的,创建者已经结束了对HummusJS.
所以我想给你2个解决方案。
使用node-pdftk npm 模块
以下示例代码使用node-pdftknpm 模块无缝组合两个 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');
});
});
});
});
Run Code Online (Sandbox Code Playgroud)
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');
});
});
});
Run Code Online (Sandbox Code Playgroud)
我个人更喜欢使用 pdf-lib npm 模块。
Zac*_*ito 12
HummusJS支持使用appendPDFPagesFromPDF方法组合PDF
使用流来处理缓冲区的示例:
const hummus = require('hummus');
const memoryStreams = require('memory-streams');
/**
* Concatenate two PDFs in Buffers
* @param {Buffer} firstBuffer
* @param {Buffer} secondBuffer
* @returns {Buffer} - a Buffer containing the concactenated PDFs
*/
const combinePDFBuffers = (firstBuffer, secondBuffer) => {
var outStream = new memoryStreams.WritableStream();
try {
var firstPDFStream = new hummus.PDFRStreamForBuffer(firstBuffer);
var secondPDFStream = new hummus.PDFRStreamForBuffer(secondBuffer);
var pdfWriter = hummus.createWriterToModify(firstPDFStream, new hummus.PDFStreamForResponse(outStream));
pdfWriter.appendPDFPagesFromPDF(secondPDFStream);
pdfWriter.end();
var newBuffer = outStream.toBuffer();
outStream.end();
return newBuffer;
}
catch(e){
outStream.end();
throw new Error('Error during PDF combination: ' + e.message);
}
};
combinePDFBuffers(PDFBuffer1, PDFBuffer2);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6687 次 |
| 最近记录: |