Nodejs拆分PDF为多个文件,然后合并文件


拆分(切割)pdf文件为多个pdf文件

用法: node split.js <pdf文件路径> <拆分份数>

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

/**
 * 将 PDF 拆分成指定份数
 * @param {string} inputFile 输入的 PDF 文件路径
 * @param {number} parts 要拆分的份数
 */
async function splitPdf(inputFile, parts) {
  // 读取原始 PDF
  const existingPdfBytes = fs.readFileSync(inputFile);
  const pdfDoc = await PDFDocument.load(existingPdfBytes);

  const totalPages = pdfDoc.getPageCount();
  const step = Math.floor(totalPages / parts);
  let remainder = totalPages % parts;

  let start = 0;
  for (let i = 0; i < parts; i++) {
    let end = start + step + (remainder > 0 ? 1 : 0);
    remainder--;

    // 创建一个新的 PDF
    const newPdf = await PDFDocument.create();
    const copiedPages = await newPdf.copyPages(pdfDoc, [...Array(end - start).keys()].map(x => x + start));
    copiedPages.forEach((page) => newPdf.addPage(page));

    // 保存拆分后的 PDF
    const pdfBytes = await newPdf.save();
    const outName = `part_${i + 1}.pdf`;
    fs.writeFileSync(outName, pdfBytes);
    console.log(`已生成: ${outName} (第 ${start + 1} 页 到 第 ${end} 页)`);

    start = end;
  }
}

// 使用示例:node split.js input.pdf 5
const inputFile = process.argv[2];
const parts = parseInt(process.argv[3], 10);

if (!inputFile || !parts) {
  console.log("用法: node split.js <pdf文件路径> <拆分份数>");
  process.exit(1);
}

splitPdf(inputFile, parts).catch(err => console.error(err));

按顺序合并拆分的pdf文件为1个pdf文件

用法: 用法: node merge.js <输出文件名> <输入文件1> <输入文件2> <输入文件3> ...

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

/**
 * 合并多个 PDF 文件
 * @param {string[]} inputFiles 要合并的 PDF 文件路径数组
 * @param {string} outputFile 输出的 PDF 文件名
 */
async function mergePdf(inputFiles, outputFile) {
  const mergedPdf = await PDFDocument.create();

  for (const file of inputFiles) {
    const pdfBytes = fs.readFileSync(file);
    const pdf = await PDFDocument.load(pdfBytes);
    const copiedPages = await mergedPdf.copyPages(pdf, pdf.getPageIndices());
    copiedPages.forEach((page) => mergedPdf.addPage(page));
    console.log(`已添加: ${file}`);
  }

  const mergedBytes = await mergedPdf.save();
  fs.writeFileSync(outputFile, mergedBytes);
  console.log(`合并完成: ${outputFile}`);
}

// 用法: node merge.js output.pdf part_1.pdf part_2.pdf ...
const args = process.argv.slice(2);
if (args.length < 2) {
  console.log("用法: node merge.js <输出文件名> <输入文件1> <输入文件2> ...");
  process.exit(1);
}

const outputFile = args[0];
const inputFiles = args.slice(1);

mergePdf(inputFiles, outputFile).catch(err => console.error(err));

文章作者: Alan Work
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Alan Work !
  目录