前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PDF 合并软件要收费?程序员自己做一个

PDF 合并软件要收费?程序员自己做一个

原创
作者头像
程序员鱼皮
发布2021-03-20 23:17:24
1.1K0
发布2021-03-20 23:17:24
举报
文章被收录于专栏:鱼皮客栈鱼皮客栈

最近,鱼皮遇到点麻烦事儿,需要对 几千个 PDF 文件做统一处理,比如删除所有 PDF 的前几页、或者给所有 PDF 添加封面等。

如果是几个文件的话,倒可以人工一个一个去操作,但是对于几千个文件,肯定要利用软件实现自动化批处理了。

在网上也搜了很多 PDF 批处理的软件,确实有很多可以满足需求,但问题是,全部都要收费!而且,一个特么比一个贵啊!

那作为一名程序员,何不自己动手、丰衣足食,自己开发一个批处理 PDF 文件的工具?

决定了!我不仅要做,还要直播做!

为何选择自己开发?

一方面是我的需求比较简单,再加上现在有各种编程类库,想必自己开发的成本也不会很高,起码比手动处理一个个 PDF 好多了。

另一方面是好久没有写小工具了,心里痒痒的,想练练手。

当然,还有最重要的一点,就是带直播间的各位小伙伴感受一下编程的乐趣~

让我们开始吧!

制作过程

在此之前,我并不了解有哪些处理 PDF 的类库,因此是真正的完全从零开始 调研 + 开发

整个开发过程大概持续了半个小时,如果排除安装环境、找源文件、直播交流等事情占用的时间,大概 10 分钟就能完成,真的非常简单了。

技术选型

首先,要选择使用何种编程语言和类库来编写程序。提到小工具和脚本,我第一时间想到的是用 Python,可能是 Python 做文件处理的广告太多了吧哈哈。有一说一,Python 的语法简单,类库丰富,用它来开发小工具的确非常方便。

那如何处理 PDF 文件呢?网上肯定有别人开发好的工具类库!于是我去 GitHub 上简单搜索了下,有没有同时支持 PDF 修改、合并、页面删除的库,果然搜到了 PyPDF2,看了下项目介绍,简直完美符合我的需求,而且用法也很简单。

因此,确定了,使用 Python 语言 + PyPDF2 进行开发。

安装 Python 和类库

Python 的安装非常简单,直接官网下载对应操作系统的安装包即可。要注意的是,在安装 Python 时,最好勾选上自动环境变量配置,省去了自己操作的麻烦。

勾选自动添加环境变量
勾选自动添加环境变量

安装好 Python 后,可以在控制台输入命令来验证是否安装成功。

因为等会我们的工具程序依赖 PyPDF2 类库,所以还要用 Python 自带的安装工具 pip 来安装下它。

代码语言:txt
复制
pip install PyPDF2

安装好这些后,开始编写代码。

编写代码

如果只是要实现两个 PDF 文件合并,一行代码都不用自己写!因为 PyPDF2 类库已经给我们提供了文件合并的 Demo,直接复制粘贴过来就行了。

代码如下,非常通俗易懂:

代码语言:txt
复制
from PyPDF2 import PdfFileMerger

# 定义一个容器,存储所有页面
merger = PdfFileMerger()

# 读取文件
input1 = open("document1.pdf", "rb")
input2 = open("document2.pdf", "rb")

# 插入 pdf1 的前三页
merger.append(fileobj = input1, pages = (0,3))

# 插入 pdf2 的第一页
merger.merge(fileobj = input2, pages = (0,1))

# 写入一个新的 PDF 文件,输出
output = open("document-output.pdf", "wb")
merger.write(output)

我们可以随便找两个 PDF 文件来测试下,先跑通 Demo 再去做进一步的修改。

上述代码运行成功后,我们可以支持用户自己输入要合并的 PDF 文件名,并且自定义第二个要拼接的 PDF 的起始页数。

比如第一个 PDF 只有一页封面,第二个 PDF 拼接起始页为第二页,二者合并,就实现了替换 PDF 文件封面的效果。

最终代码如下:

代码语言:txt
复制
from PyPDF2 import PdfFileMerger, PdfFileReader

merger = PdfFileMerger()

# input 函数接受用户输入
inputStr1 = input("请输入封面")
inputStr2 = input("请输入pdf")
startNum = input("请输入pdf起始页")

input1 = open(inputStr1, "rb")
input2 = open(inputStr2, "rb")
# 获取 pdf 对象
pdf = PdfFileReader(input2)

# 拼接 pdf1 的第一页
merger.append(fileobj = input1, pages = (0,1))

# 拼接 pdf2 的第二~尾页
merger.append(fileobj = input2, pages = (int(startNum), pdf.getNumPages()))

# Write to an output PDF document
output = open("document-output.pdf", "wb")
merger.write(output)

上面所有的参数都是可以修改的,大家甚至可以 开发一个界面,支持用户在输入框设置参数,从而让工具变得更易用!

调试

开发的过程中,需要不断调试,这里我们简单验证下结果,观察 PDF 的合并是否符合预期即可!


好了,以上就是 PDF 处理工具的制作过程。对于程序员来说,编程语言是最好的工具,大家平时可以多利用它们来解决问题、提高工作效率,还能提升自己的编程技能,岂不美哉!

视频演示:https://www.bilibili.com/video/BV1zV411Y7AU/

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为何选择自己开发?
  • 制作过程
    • 技术选型
      • 安装 Python 和类库
        • 编写代码
          • 调试
          相关产品与服务
          云直播
          云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档