当前位置:首页 > JavaScript

js实现合并pdf

2026-04-07 12:10:06JavaScript

使用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.js合并PDF

PDF.js是Mozilla开发的PDF处理库,主要用于渲染但也可以用于基本操作。

安装pdfjs-dist:

npm install pdfjs-dist

合并示例:

const pdfjsLib = require('pdfjs-dist/legacy/build/pdf.js');
const fs = require('fs');

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

  for (const path of pdfPaths) {
    const data = fs.readFileSync(path);
    const pdf = await pdfjsLib.PDFDocument.load(data);
    const pages = await mergedPdf.copyPages(pdf, pdf.getPageIndices());
    pages.forEach(page => mergedPdf.addPage(page));
  }

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

浏览器端合并方案

对于纯浏览器环境实现,可以使用pdf-lib的浏览器版本:

<script src="https://unpkg.com/pdf-lib@1.16.0/dist/pdf-lib.min.js"></script>
<script>
async function mergeInBrowser(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' });
}
</script>

使用Node.js原生模块

对于简单的PDF合并,可以使用hummus.js:

npm install hummus

示例代码:

const hummus = require('hummus');

function mergeWithHummus(pdfPaths, outputPath) {
  const pdfWriter = hummus.createWriter(outputPath);

  pdfPaths.forEach(path => {
    pdfWriter.appendPDFPagesFromPDF(path);
  });

  pdfWriter.end();
}

性能优化建议

处理大型PDF文件时考虑分块处理,避免内存问题。可以设置缓冲区大小或使用流式处理。

对于服务器端应用,建议使用专门的PDF处理服务如PDFtk或Ghostscript,通过子进程调用:

js实现合并pdf

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

function mergeWithPdftk(files, output) {
  exec(`pdftk ${files.join(' ')} cat output ${output}`, (error) => {
    if (error) throw error;
  });
}

所有方案中,pdf-lib提供了最全面的功能支持,包括保留表单字段、注释等PDF特性。浏览器环境中注意处理大文件可能导致的内存限制问题。

标签: jspdf
分享给朋友:

相关文章

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

js 实现滚动

js 实现滚动

实现滚动的方法 使用 window.scrollTo() window.scrollTo() 方法可以滚动到文档中的特定位置。可以指定 x 和 y 坐标,或者使用平滑滚动的选项。 // 滚动到指定位…

js实现轮播代码

js实现轮播代码

基础轮播实现 使用HTML、CSS和JavaScript创建一个简单的轮播效果。HTML部分定义轮播容器和图片元素。 <div class="carousel"> <div c…

js实现的游戏

js实现的游戏

JavaScript 游戏开发基础 JavaScript 是开发网页游戏的流行选择,因其无需插件即可在浏览器中运行。以下是一些关键技术和资源: HTML5 Canvas Canvas 提供了绘制图形…