Node.js实现两PDF文件按页交替合并方案咨询
用pdf-lib实现PDF页面交替合并
核心思路
遍历两个PDF的页面索引,依次从两个文件中取出对应页面添加到新PDF;若其中一个PDF页数更多,剩余页面直接追加到新文档末尾。
代码实现
首先安装依赖:
npm install pdf-lib
以下是完整的异步处理函数:
const { PDFDocument } = require('pdf-lib'); const fs = require('fs').promises; async function alternateMergePdfs(pdfPath1, pdfPath2, outputPath) { // 读取两个PDF文件的ArrayBuffer const pdfBuffer1 = await fs.readFile(pdfPath1); const pdfBuffer2 = await fs.readFile(pdfPath2); // 加载源PDF文档 const pdfDoc1 = await PDFDocument.load(pdfBuffer1); const pdfDoc2 = await PDFDocument.load(pdfBuffer2); // 创建新的PDF文档 const mergedPdf = await PDFDocument.create(); // 获取两个PDF的页数 const pageCount1 = pdfDoc1.getPageCount(); const pageCount2 = pdfDoc2.getPageCount(); const maxPages = Math.max(pageCount1, pageCount2); // 交替添加页面 for (let i = 0; i < maxPages; i++) { // 从第一个PDF添加对应页面(如果存在) if (i < pageCount1) { const [page] = await mergedPdf.copyPages(pdfDoc1, [i]); mergedPdf.addPage(page); } // 从第二个PDF添加对应页面(如果存在) if (i < pageCount2) { const [page] = await mergedPdf.copyPages(pdfDoc2, [i]); mergedPdf.addPage(page); } } // 保存合并后的PDF到文件 const mergedPdfBytes = await mergedPdf.save(); await fs.writeFile(outputPath, mergedPdfBytes); } // 调用示例 alternateMergePdfs('./file1.pdf', './file2.pdf', './merged.pdf') .then(() => console.log('PDF合并完成')) .catch(err => console.error('合并失败:', err));
关键说明
copyPages方法用于从源PDF复制指定页面,这里每次复制单个页面后添加到新文档- 循环次数取两个PDF的最大页数,确保所有页面都被处理
- 每次循环先检查当前索引是否在对应PDF的页数范围内,避免越界错误
Hummus.js 实现思路(可选)
如果坚持用hummus.js,核心逻辑是通过PDFWriter逐个导入页面:
- 创建
PDFWriter实例指向输出文件 - 分别打开两个源PDF的
PDFReader - 循环遍历页面索引,交替从两个Reader中获取页面,通过
writePage写入新文档 - 处理剩余的多余页面
不过hummus.js的API相对底层,代码复杂度更高,更推荐用pdf-lib实现。
内容的提问来源于stack exchange,提问作者James Bi
相关产品推荐
相关产品推荐

