You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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逐个导入页面:

  1. 创建PDFWriter实例指向输出文件
  2. 分别打开两个源PDF的PDFReader
  3. 循环遍历页面索引,交替从两个Reader中获取页面,通过writePage写入新文档
  4. 处理剩余的多余页面

不过hummus.js的API相对底层,代码复杂度更高,更推荐用pdf-lib实现。

内容的提问来源于stack exchange,提问作者James Bi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 08:32:13