likes
comments
collection
share

pdf合并以及拆分

作者站长头像
站长
· 阅读数 24

在网上冲浪的时候发现有这样的网站,可以将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的运用上更上一层楼。

期待能与大家交流与学习。

往期文章