当前位置:首页 > 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原生模块

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

js实现pdf合并

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接口。浏览器端方案需要用户主动选择文件,无法直接访问本地文件系统。

标签: jspdf
分享给朋友:

相关文章

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

vue 实现pdf

vue 实现pdf

在Vue中实现PDF功能 使用vue-pdf库 安装vue-pdf库: npm install vue-pdf 在Vue组件中使用: <template> <pdf…

vue实现pdf

vue实现pdf

Vue 中实现 PDF 功能的方法 使用第三方库 vue-pdf 安装 vue-pdf 库: npm install vue-pdf 在组件中使用: <template> <…

js实现的游戏

js实现的游戏

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

js 实现页面刷新

js 实现页面刷新

使用 location.reload() location.reload() 是原生 JavaScript 提供的页面刷新方法。调用该方法会重新加载当前页面,相当于点击浏览器的刷新按钮。 // 基本…

js实现弹框

js实现弹框

使用 alert 实现简单弹框 JavaScript 的 alert 方法可以直接显示一个简单的弹框,内容为纯文本: alert("这是一个简单的弹框"); 使用 confirm 实现确认弹框…