js实现合并pdf
使用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文件时考虑内存限制,可能需要分块处理。服务器端实现通常比浏览器端更可靠,特别是对于大文件。
所有方法都返回Promise,需要使用async/await或.then()处理异步操作。错误处理应该包括文件读取失败和PDF解析错误的情况。







