拆分(切割)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));