nodejs对PDF合并的几种方法

方法一 使用pdfbox.jar 对PDF进行合并

这里需要安装java环境;然后下载pdfbox.jar文件 和下面的js文件放在相同目录

/*** 这个是用pdfbox.jar 对PDF进行合并, 使用cmd 执行java命名* @param sourceFiles* @param outputFile*/
const PDFMerger = async ({sourceFiles, outputFile}) => {makeDir(getFilenameInfoByPath(outputFile).fileDir)const  fileListString = sourceFiles.join(' ')const cmd = `java -jar ${__dirname}\\pdfbox.jar PDFMerger ${fileListString} ${outputFile}`console.log(cmd)await new Promise((resolve, reject) => {const spawnObj = exec(cmd);spawnObj.stdout.on('data', function (chunk) {console.log('stdout-----', chunk.toString());});spawnObj.stderr.on('data', data => {console.log('stderr-----', data);});spawnObj.on('exit', code => {console.log('exit-----: ' + code);})spawnObj.on('close', code => {if (code === 0) {console.log('成功-----' + code);resolve(true)} else {console.log('失败-----' + code);// eslint-disable-next-line prefer-promise-reject-errorsreject(false)}})})
}

参考链接 https://pdfbox.apache.org/2.0/commandline.html


方法二 使用的pdf-lib 对PDF进行合并

这个需要安装npm install pdf-lib


/*** 合并多个PDF为一个PDF文件* 这个是使用的pdf-lib 对PDF进行合并*/
const {PDFDocument} = require('pdf-lib')
const mergePDF = async ({sourceFiles,outputFile}) => {const pdfDoc = await PDFDocument.create()for(let i = 0;i<sourceFiles.length;i++) {const localPath = sourceFiles[i]const PDFItem = await PDFDocument.load(fs.readFileSync(localPath))for(let j = 0;j<PDFItem.getPageCount();j++) {const [PDFPageItem] = await pdfDoc.copyPages(PDFItem, [j])pdfDoc.addPage(PDFPageItem)}}const pdfBytes = await pdfDoc.save()fs.writeFileSync(outputFile, pdfBytes)}

参考链接 https://pdf-lib.js.org/docs/api/
参考链接 https://github.com/Hopding/pdf-lib


方法三 使用的easy-pdf-merge 对PDF进行合并

这个需要安装npm install easy-pdf-merge 这个js的底层其实和方法一是一样的,也是使用pdfbox.jar 对PDF进行合并

/*** 合并PDF* 这个是使用easy-pdf-merge 对PDF合并* @param sourceFiles* @param outputFile*/
const easyPDFmerge = ({sourceFiles,outputFile}) => {const mergeUtil = require('easy-pdf-merge')return new Promise(resolve => {const startTime = new Date()mergeUtil(sourceFiles, outputFile, err => {// 合并失败if (err) {// 抛出异常resolve({status: 1,err})} else {// 合并成功const endTime = new Date()// 返回合并耗时resolve({status: 0,time: endTime - startTime})}})})
}

参考链接 https://github.com/karuppiah7890/easy-pdf-merge


测试

介绍以上3种方法后;对3个方法进行了测试;以下代码

const path = require('path')
// 要合并的PDF文件存放路径
const sourceFiles = [path.resolve(__dirname, './pdf/test1.pdf'),path.resolve(__dirname, './pdf/test2.pdf')]
// 合并后文件的输出路径
const outputFile = path.resolve(__dirname, 'output.pdf')// 方法一
const test1 = async () => {const time = Date.now()await PDFMerger({sourceFiles,outputFile:path.resolve(__dirname, 'output1.pdf'),})console.log(`test1耗时:${Date.now() - time}ms`)
}
test1()// 方法二
const test2 = async () => {const time = Date.now()await mergePDF({sourceFiles,outputFile:path.resolve(__dirname, 'output2.pdf'),})console.log(`test2耗时:${Date.now() - time}ms`)
}
test2()// 方法三
const test3 = async () => {const time = Date.now()await easyPDFmerge({sourceFiles,outputFile:path.resolve(__dirname, 'output3.pdf'),})console.log(`test3耗时:${Date.now() - time}ms`)
}
test3()

以上代码对test1.pdf和test2.pdf进行合成打印出耗时;
结果显示方法一耗时更短;且产生的文件大小比较小,pdf-lib合并后的pdf文件也变得很大。

test1耗时:1463ms
test3耗时:1519ms
test2耗时:4541ms

nodejs对PDF合并的几种方法相关推荐

  1. android选择多个文件_一分钟合并多个Excel、PDF文件,3种方法任你选择,好用到没朋友...

    一分钟合并多个Excel.PDF文件,3种方法任你选择,好用到没朋友 前情提要: Excel.PDF多个文件怎样合并成一个文件?需求场景: PDF文件合并 当一份完成的PDF资料分为很多份的时候,我们 ...

  2. 如何将几个pdf合并成一个pdf?教你pdf合并最快速的方法

    如何将几个pdf合并成一个pdf?想必很多朋友在日常的工作中,都会接触到pdf文件.有时候我们面对大量的pdf文件,为了方便查看和管理,就需要将几个pdf合并成一个pdf,那么具体该怎么操作呢?相信有 ...

  3. python超神之路:Python3 列表list合并的4种方法

    Python3 列表list合并的4种方法 方法1: 直接使用"+"号合并列表 aList = [1,2,3] bList = ['www', 'pythontab.com'] c ...

  4. git base , 版本合并:git的分支与合并的两种方法 - 方法1:git merge

    1git merge 其实就是很简单一件事: 1 找到分支节点ID 并copy 下来 git command git log -g 或者 git win 2 切到分支 $ git reset --ha ...

  5. win7如何调整计算机c盘,win7系统让c盘和d盘合并的两种方法

    有时我们可能需要将雨林木风win7系统电脑的两个盘符合并,这样可以增大内存空间,比如让c盘和d盘合并,这样就有足够的空间了.之前小编教程分享win7系统分区的方法,但是要让c盘和d盘合并该怎么操作呢? ...

  6. html转pdf(总结五种方法Java)

    html转pdf(总结五种方法Java) Java 实现html转pdf,总结五种方法. 推荐使用wkhtmltopdf,Itext 方法一:使用wkhtmltopdf 1.下载插件wkhtmltop ...

  7. 编辑PDF文件的两种方法

    PDF文件具备较好的稳定性.兼容性,在日常工作中的应用非常广泛,但想要编辑文件内容就不那么容易了,下面来说说编辑PDF文件的两种方法. 方法一: 我们知道,查看PDF文件只需要阅读器就可以了,如果想对 ...

  8. 数组拼接html js,js数组合并的几种方法

    JS合并数组的几种方法及优劣比较 var datas = [ ['红色', '蓝色'], ['XL'], ['图片', '文字'] ]; 如何 将let datas = [[1, 2], [3,0,5 ...

  9. Java合并PDF文件的几种方法

    最近需要做一个把多个pdf报告合并成一个以方便预览的需求,下面总结一下自己用的方法和遇到的一些问题, 第一种方法: 此方法引用了itextpdf.jar包: private static void m ...

  10. Python3 列表list合并的4种方法

    方法1: 直接使用"+"号合并列表 aList = [1,2,3] bList = ['www', 'python.com'] cList = aList + bList dLis ...

最新文章

  1. 山东大学计算机学院预推免,山东大学计算机科学与技术学院(专业学位)计算机技术保研...
  2. 西湖首届本科生开招!每名学生配三位学术导师,大二全员海外交流
  3. 基础三:控制执行流程
  4. php 检测数组内是否有空值,PHP判断数组是否为空的常用方法
  5. xyCMS框架的webshell
  6. 修复Net4.0在IE11下doPostBack无效的问题
  7. 插件式架构设计实践:插件式系统架构设计简介
  8. 数学系和物理系学生有什么差别?
  9. 网站随机背景音乐源码
  10. 三、悟透javascript中的function
  11. 乐鑫科技线上笔试什么内容_2020广东省公务员考试笔试考什么内容?笔试如何去备考?...
  12. 系统出错, 发生系统错误 1067, 进程意外终止. 解决方法
  13. jsonp实现跨域问题
  14. 联想y50p70换固态硬盘_换了固态硬盘电脑就变快?告诉你:固态硬盘不是万能药...
  15. pdf裁边app_PDF切边裁剪(paper for kindle)下载_PDF切边裁剪(paper for kindle)官方下载-太平洋下载中心...
  16. Hibernate技术书写
  17. 算法大赛神器:集成学习方法关键点介绍
  18. 好程序员Java培训分享20个Java程序员基础题
  19. STUN, TURN, ICE介绍
  20. 【Mskt问题的解决办法】使用御坂翻译器2.x版本遇到的常见问题及解决办法

热门文章

  1. 【Shell】Sed 删除、替换、增加字符串
  2. 【C语言】实验室设备管理系统
  3. 计算机批注的概念,批注
  4. php js 美国时间转换,洛杉矶时间换算(世界时间换算器在线)
  5. 期末知识点复习——概率论与数理统计(5)
  6. 目标追踪(一)环境搭建
  7. MT6765/MT6762/MT6761平台能否使用ACC/Gyro/A+G与AP之间的I2C接口
  8. 玩转手机摄影 oeasy教程总结
  9. 两列数据对比找不同,并且高亮数据不同的单元格
  10. 滴滴出行app——网约车出行的背后(下)