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

四、项目结构

五、使用方法

六、效果

总结

踩坑路漫漫长@~@

相关推荐
程序猿John2 小时前
ES6 新增特性 箭头函数
前端·javascript·es6
@大迁世界3 小时前
彻底改变我 React 开发方式的组件模式
前端·javascript·react.js·前端框架·ecmascript
William Dawson3 小时前
【Vue 3 + Element Plus 实现产品标签的动态添加、删除与回显】
前端·javascript·vue.js
拉不动的猪3 小时前
项目基础搭建时的一些基本注意点
前端·javascript·面试
Code额4 小时前
ECMAScript 6 新特性(二)
前端·javascript·ecmascript
_清浅5 小时前
JavaScript(JS进阶)
开发语言·前端·javascript·操作系统·html5
小王码农记6 小时前
vue中动态绑定ref后,获取某个具体组件实例
前端·javascript·vue.js
我是聂可6 小时前
Node.js 下载与安装(图文)
node.js
悲且狂6 小时前
vue辅助工具(vue系列二)
前端·javascript·vue.js
牧码岛6 小时前
Web前端之Vue+Element实现表格动态不同列合并多行、localeCompare、forEach、table、push、sort、Map
前端·javascript·elementui·vue·web·web前端