当前位置:首页 > JavaScript

js实现合并pdf

2026-02-02 18:26:21JavaScript

使用pdf-lib库合并PDF

pdf-lib是一个纯JavaScript库,可以在浏览器和Node.js环境中运行。它支持创建、修改和合并PDF文件。

安装pdf-lib:

npm install pdf-lib

合并PDF示例代码:

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

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

  for (const pdfPath of pdfPaths) {
    const pdfBytes = fs.readFileSync(pdfPath);
    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库

pdf-merger-js是另一个专门用于合并PDF的JavaScript库,API更简洁。

安装:

npm install pdf-merger-js

使用示例:

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

async function mergePDFs(pdfPaths, outputPath) {
  const merger = new PDFMerger();

  for (const pdfPath of pdfPaths) {
    await merger.add(pdfPath);
  }

  await merger.save(outputPath);
}

mergePDFs(['file1.pdf', 'file2.pdf'], 'merged.pdf');

浏览器端实现

在浏览器环境中合并PDF需要注意文件加载方式:

async function mergePDFsInBrowser(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' });
}

// 使用示例
const fileInput = document.getElementById('pdf-files');
fileInput.addEventListener('change', async (e) => {
  const mergedPdf = await mergePDFsInBrowser(Array.from(e.target.files));
  const url = URL.createObjectURL(mergedPdf);
  window.open(url);
});

注意事项

确保处理大型PDF文件时考虑内存限制,可能需要分块处理。服务器端实现通常比浏览器端更可靠,特别是对于大文件。

js实现合并pdf

所有方法都返回Promise,需要使用async/await或.then()处理异步操作。错误处理应该包括文件读取失败和PDF解析错误的情况。

标签: jspdf
分享给朋友:

相关文章

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval 实…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

js 实现图片 放大

js 实现图片 放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性可以实现图片的平滑放大效果。结合 JavaScript 监听鼠标事件控制放大状态: con…

js实现排序

js实现排序

数组排序方法 JavaScript提供了内置的sort()方法用于数组排序。默认情况下,sort()将元素转换为字符串并按照Unicode码点排序。对于数字排序,需传入比较函数。 const num…