当前位置:首页 > JavaScript

js实现pdf合并

2026-01-30 22:02:44JavaScript

使用PDF-Lib库合并PDF

安装PDF-Lib库:

npm install pdf-lib

代码示例:

const { PDFDocument } = require('pdf-lib');
const fs = require('fs');

async function mergePDFs(filePaths, outputPath) {
  const mergedPdf = await PDFDocument.create();

  for (const filePath of filePaths) {
    const pdfBytes = fs.readFileSync(filePath);
    const pdfDoc = await PDFDocument.load(pdfBytes);
    const pages = await mergedPdf.copyPages(pdfDoc, pdfDoc.getPageIndices());
    pages.forEach(page => mergedPdf.addPage(page));
  }

  const mergedPdfBytes = await mergedPdf.save();
  fs.writeFileSync(outputPath, mergedPdfBytes);
}

// 使用示例
mergePDFs(['file1.pdf', 'file2.pdf'], 'merged.pdf');

使用pdf-merger-js库

安装库:

npm install pdf-merger-js

实现代码:

const PDFMerger = require('pdf-merger-js');
const merger = new PDFMerger();

const merge = async (pdfs, output) => {
  for (const pdf of pdfs) {
    await merger.add(pdf);
  }
  await merger.save(output);
};

merge(['1.pdf', '2.pdf'], 'merged.pdf');

浏览器端实现方案

使用pdf.js和File API:

const mergePdfsInBrowser = async (pdfFiles) => {
  const { PDFDocument } = PDFLib;
  const mergedPdf = await PDFDocument.create();

  for (const file of pdfFiles) {
    const arrayBuffer = await file.arrayBuffer();
    const pdfDoc = await PDFDocument.load(arrayBuffer);
    const pages = await mergedPdf.copyPages(pdfDoc, pdfDoc.getPageIndices());
    pages.forEach(page => mergedPdf.addPage(page));
  }

  const mergedPdfBytes = await mergedPdf.save();
  return new Blob([mergedPdfBytes], { type: 'application/pdf' });
};

使用Node.js原生模块

对于简单场景可尝试以下方法:

const fs = require('fs');
const { exec } = require('child_process');

function mergeWithPDFtk(inputs, output) {
  exec(`pdftk ${inputs.join(' ')} cat output ${output}`, (err) => {
    if (err) throw err;
  });
}

注意事项

  • 确保处理大文件时有足够内存
  • 浏览器端方案需要考虑文件大小限制
  • 所有异步操作需要适当处理错误
  • 生产环境建议添加进度指示

以上方案中,PDF-Lib提供了最全面的功能支持,包括修改现有PDF内容的能力。pdf-merger-js则提供了更简单的API接口。浏览器端方案需要用户主动选择文件,无法直接访问本地文件系统。

js实现pdf合并

标签: jspdf
分享给朋友:

相关文章

vue 实现导出pdf

vue 实现导出pdf

使用 html2canvas 和 jsPDF 实现导出 PDF 在 Vue 项目中安装 html2canvas 和 jsPDF 依赖: npm install html2canvas jspdf 创…

js实现轮播

js实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

css3结合js制作

css3结合js制作

CSS3 结合 JavaScript 制作动态效果 CSS3 和 JavaScript 结合可以实现丰富的动态效果,包括动画、交互和响应式设计。以下是几种常见的实现方式: CSS3 动画与 Jav…

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…