js实现合并pdf
合并PDF的JavaScript实现方法
在JavaScript中合并PDF可以通过多种方式实现,以下是几种常见的方法:
使用pdf-lib库
pdf-lib是一个纯JavaScript库,可以在浏览器和Node.js环境中运行。以下是使用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.js是Mozilla开发的PDF阅读器库,也可以用于PDF操作:
const pdfjsLib = require('pdfjs-dist');
async function mergePDFs(pdfPaths, outputPath) {
const mergedPdf = await pdfjsLib.PDFDocument.create();
for (const pdfPath of pdfPaths) {
const pdfBytes = fs.readFileSync(pdfPath);
const pdfDoc = await pdfjsLib.PDFDocument.load(pdfBytes);
const pages = pdfDoc.getPages();
for (const page of pages) {
const [copiedPage] = await mergedPdf.copyPages(pdfDoc, [page]);
mergedPdf.addPage(copiedPage);
}
}
const mergedPdfBytes = await mergedPdf.save();
fs.writeFileSync(outputPath, mergedPdfBytes);
}
浏览器端实现
在浏览器环境中,可以使用pdf-lib的浏览器版本:

import { PDFDocument } from 'pdf-lib';
async function mergePDFsInBrowser(pdfFiles) {
const mergedPdf = await PDFDocument.create();
for (const pdfFile of pdfFiles) {
const arrayBuffer = await pdfFile.arrayBuffer();
const pdfDoc = await PDFDocument.load(arrayBuffer);
const pages = await mergedPdf.copyPages(pdfDoc, pdfDoc.getPageIndices());
pages.forEach(page => mergedPdf.addPage(page));
}
return await mergedPdf.save();
}
注意事项
- 处理大型PDF文件时,注意内存使用情况
- 某些PDF可能包含加密或特殊权限,需要额外处理
- 合并后的PDF会保留原始文档的页面尺寸和方向
- 在Node.js环境中需要文件系统访问权限
以上方法提供了在不同环境下合并PDF的解决方案,可以根据具体需求选择合适的实现方式。






