nodejs小工具--pdf拆分

提示:pdf拆分

### 文章目录

  • [@TOC(文章目录)](#文章目录 @TOC 前言 一、pdf-lib 二、pdf拆分功能 三、双击运行bat文件 四、项目结构 五、使用方法 六、效果 总结)
  • [前言](#文章目录 @TOC 前言 一、pdf-lib 二、pdf拆分功能 三、双击运行bat文件 四、项目结构 五、使用方法 六、效果 总结)
  • [一、pdf-lib](#文章目录 @TOC 前言 一、pdf-lib 二、pdf拆分功能 三、双击运行bat文件 四、项目结构 五、使用方法 六、效果 总结)
  • [二、pdf拆分功能](#文章目录 @TOC 前言 一、pdf-lib 二、pdf拆分功能 三、双击运行bat文件 四、项目结构 五、使用方法 六、效果 总结)
  • [三、双击运行bat文件](#文章目录 @TOC 前言 一、pdf-lib 二、pdf拆分功能 三、双击运行bat文件 四、项目结构 五、使用方法 六、效果 总结)
  • [四、项目结构](#文章目录 @TOC 前言 一、pdf-lib 二、pdf拆分功能 三、双击运行bat文件 四、项目结构 五、使用方法 六、效果 总结)
  • [五、使用方法](#文章目录 @TOC 前言 一、pdf-lib 二、pdf拆分功能 三、双击运行bat文件 四、项目结构 五、使用方法 六、效果 总结)
  • [六、效果](#文章目录 @TOC 前言 一、pdf-lib 二、pdf拆分功能 三、双击运行bat文件 四、项目结构 五、使用方法 六、效果 总结)
  • [总结](#文章目录 @TOC 前言 一、pdf-lib 二、pdf拆分功能 三、双击运行bat文件 四、项目结构 五、使用方法 六、效果 总结)

前言

一、pdf-lib

pdf-lib

c 复制代码
npm install pdf-lib --save-dev

二、pdf拆分功能

index.js

c 复制代码
// 启动express服务
const express = require('express');
const app = express();

app.listen(3000,()=>{
    console.log('http://localhost:3000');
});

// 文件读写
const fs = require('fs');
// 路径
const path = require('path');
// pdf-lib
const pdfLib = require('pdf-lib');
// PDFDocument
const pdfDoc = pdfLib.PDFDocument;

// 拆分pdf文件
const splitPdf = async (pdfPath,name) => {
    // 文件bytes
    const bytes = await fs.promises.readFile(pdfPath);
    // pdf数据
    const pdfData = await pdfDoc.load(bytes)
    // pdf页数
    const pages = pdfData.getPages().length;
    for (let i = 0; i < pages; i++) {
        const doc = await pdfDoc.create();
        const [ page ] = await doc.copyPages(pdfData, [i])
        doc.addPage(page);
        const pdfBytes = await doc.save()
        await fs.promises.writeFile(`./output/${name||'pdf'}-${i + 1}.pdf`, pdfBytes);
    }
    console.log(`拆分为${pages}个pdf文件`)
}

// 扫描文件夹下的.pdf文件
const searchPdf =  (dir, callback) => {
    // 读取文件夹下数据
    fs.readdir(dir, (fileErr, files) => {
        if (fileErr)return console.error('Error:', fileErr);
        // 遍历文件夹下的文件
        files.forEach((file) => {
            // file路径
            let fullPath = path.join(dir, file);
            fs.stat(fullPath, async (err, state) => {
                if (err)return console.error('Error:', err);
                // 如果是文件夹,继续扫描读取到的文件夹
                if (state.isDirectory()) return searchPdf(fullPath);
                // 是否为.pdf文件
                if (path.extname(file).toLowerCase() == '.pdf') {
                    console.log('扫描到pdf文件,路径:', fullPath,file);
                    // 拆分pdf文件
                    let name = file.split('.pdf')[0];
                    await splitPdf(fullPath,name);
                    
                }
            });
        });
    });
}

searchPdf('./source');

三、双击运行bat文件

run.bat

c 复制代码
@echo off
cd /d "%~dp0"
node index.js

四、项目结构

五、使用方法

六、效果

总结

踩坑路漫漫长@~@

相关推荐
小陈同学呦5 小时前
前端如何处理订单状态导航的数据竞态问题
前端·javascript
开发者每周简报5 小时前
网海三部曲·无名宗师传
javascript·人工智能
之歆7 小时前
Day01_ES6+ 专业指南:从基础到实战的现代JavaScript开发(下)
前端·javascript·es6
kyriewen8 小时前
AI生成代码快如闪电,但我修了三个小时——它到底帮了谁?
前端·javascript·ai编程
卷帘依旧9 小时前
v8引擎和libuv的关系
node.js
竹林8189 小时前
用 wagmi v2 和 viem 手写 NFT 市场批量上架功能,我踩遍了所有异步坑
javascript
zithern_juejin9 小时前
数组扁平化
javascript
清溪5499 小时前
n8n表达式沙箱逃逸至RCE漏洞-CVE-2025-68613复现
javascript·安全
Hilaku9 小时前
多标签页并发请求导致 Token 刷新失败?只有 15行代码就能解决 !
前端·javascript·程序员
烛衔溟9 小时前
TypeScript 类的静态成员与静态方法
开发语言·javascript·typescript