pdf合并以及拆分
在网上冲浪的时候发现有这样的网站,可以将pdf拆分也可以合并,还能将其转为word、表格以及PPT等文件,增加水印也是可以的。当时在看到这些网站的时候觉得这么博主真的太好了,全都是免费的,可以帮助到好多人哦!然后我就用了几次,很不错,不管是速度还是质量都能满足我的需求,但是当我多用几次一个发现开始收费了。必须充值会员这些才能用,还有一些其他的各种限制等等。然后我就想既然如此那我就自己研究研究,如果可以那我也弄一个软件或者网站就免费。哈哈哈哈
当一个人不论风雨都要去做一件事的时候,说明他很想去做一件得到大家认可的事情。否则谁还不想躺平啊!
目前我研究出来的有以下一些功能。
- 合并
- 拆分
- 转图片
- 加水印 等
而今天给大家带来的是,合并和拆分;因为转图片和加水印目前还没整理好,只是实现了功能!
技术
由于我是在electron中开发的,所以自带node环境。 如果你不要electron的话,在node相关的框架中都是可以实现的(如:eggjs等)
- electron
- vue2
- pdf-lib
合并
引入:
const fs = require('fs');
const path = require('path');
const { PDFDocument, PDFFont, PNGImage, StandardFonts } = require('pdf-lib');
主要代码:
async run() {
// 获取文件
const a1 = path.join('C:\\Users\\zh\\Desktop', 'ip.pdf');
const a2 = path.join('C:\\Users\\zh\\Desktop', 'ui.pdf');
const cover = await PDFDocument.load(fs.readFileSync(a1));
const content = await PDFDocument.load(fs.readFileSync(a2));
// 创建一个新文档
const doc = await PDFDocument.create();
// 将封面添加到新文档中
const [coverPage] = await doc.copyPages(cover, [0]);
doc.addPage(coverPage);
// 添加单独的内容页面
const contentPages = await doc.copyPages(content, content.getPageIndices());
for (const page of contentPages) {
doc.addPage(page);
}
// 将pdf写入文件
const a3 = path.join('C:\\Users\\zh\\Desktop', 'test.pdf');
fs.writeFileSync(a3, await doc.save());
},
拆分
完整代码:
/**
* 拆分pdf
*/
async pdfResolution() {
// 读取 PDF 文件
const pdfFile = fs.readFileSync('C:\\Users\\zh\\Desktop\\test1.pdf');
// 创建 PDFDocument 对象
const pdfDoc = await PDFDocument.load(pdfFile);
// 遍历每一页,将每一页保存为单独的 PDF 文件
for (let i = 0; i < pdfDoc.getPageCount(); i++) {
const pdfBytes = await PDFDocument.create();
const [copiedPage] = await pdfBytes.copyPages(pdfDoc, [i]);
pdfBytes.addPage(copiedPage);
const a3 = path.join('C:\\Users\\zh\\Desktop', `page_${i + 1}.pdf`);
fs.writeFileSync(a3, await pdfBytes.save());
}
},
总结
以上的功能都相对比较简单,并且在pdf-lib官网中也是可以查看相关的api的,只要根据相关的api都是可以做出相对应的功能。
pdf-lib很强大,基本上我们在网上看到的一些关于pdf的功能都可以实现。只是文档全是英文暂时没有找到中文的文档,看文档确实有点费劲。
我也希望小伙伴们如果对pdf有兴趣的话,也可以多了解一些;大家相互探讨,相互学习。期待我们在pdf的运用上更上一层楼。
期待能与大家交流与学习。
往期文章
转载自:https://juejin.cn/post/7235091963313209405