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

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

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

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

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

为何选择自己开发?

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

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

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

让我们开始吧!

制作过程

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

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

技术选型

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

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

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

安装 Python 和类库

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

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

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

pip install PyPDF2

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

编写代码

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

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

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 文件封面的效果。

最终代码如下:

from PyPDF2 import PdfFileMerger, PdfFileReadermerger = 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/

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

  1. 程序员如何做一个赚钱的副业项目

    鄙人很穷. 对, 字面意义上物质上的贫乏, 虽然在互联网圈码代码搬砖, 虽然一年多多少也能搞个几十万, 但是内心清楚的很, 这些钱完全是运气好全靠老板给口饭吃, 一旦脱离了平台或者整体环境不行, 阶级 ...

  2. PDF 合并软件大全,合并 PDF 文件的简单免费工具

    PDF 是一种流行的格式,因为它通用且可靠.然而,其最大的缺陷之一是合并困难.虽然 Mac 用户可以利用内置的预览工具进行基本组合,但 Windows 没有任何本机工具来完成这项任务.您应该选择哪些第 ...

  3. 山东省软件行业协会程序员分会章程【草稿】,欢迎大家讨论

      山东省软件行业协会程序员分会章程 第一章 总则 第一条 遵守山东省软件行业协会的章程 第一条 名称 中文名称:山东省软件行业协会程序员分会 英文名称:ShanDong Software Indus ...

  4. 图片pdf合并软件:合并的方法介绍

    如何把多张图片合并成pdf文件?随意的几张照片怎么合并成PDF文件?有时候随手收集的图,或者别人发的,或者自己拍的,这些图我们都可以合并到一个pdf文档中存档,利落有不占用空间,具体该怎么做呢? 请看 ...

  5. pdf合并软件下载的旗舰版

    工作和学习时我们可能会遇到这样一个现象:下载出来的文件和图片被分成了好几个部分,整理起来十分不方便,如何才能将它们合并在一起呢?不难 办,本章介绍最简单的方法,告诉你如何将批量的PDF文件合成一个文件 ...

  6. 2008年下半年软件水平考试程序员试题分析

    2008年下半年软件水平考试程序员试题分析 作者:朱云翔(转载请注明出处) 1.题目:第1,2题. 内容:Windows操作àoffice操作 参考答案:1.B:2.C 废话:估计很多专科生和本科生不 ...

  7. 可以合并pdf的软件?pdf合并软件哪个好用?

    pdf合并软件哪个好?有时候我们需要把多个pdf合并成一个pdf,但是还有些小伙伴不知道怎么合并,下面给大家分享一个操作简单,使用方便的pdf合并软件: 搜索一下:~~~~~~轻云pdf编辑压缩官网 ...

  8. mac好用的软件推荐之程序员篇

    mac好用的软件推荐之程序员篇 前言 write:2020/06/21 updated: null 持续更新 免费软件推荐 appcleaner 一款用于能够最大程度删除软件的软件.功能描述好像有点拗 ...

  9. 桌面软件开发的复杂性在哪里,一个程序员能完成一个桌面软件开发吗

    桌面软件开发的复杂性在哪里,一个程序员能完成一个桌面软件开发吗.这个估计是很多软件开发外行人士的疑惑.而事实就是一个程序员完成不了一个桌面软件开发这个是为什么,桌面软件开发很复杂吗. 目前软件公司普通 ...

最新文章

  1. Spring集成MyBatis完整示例
  2. 独家 | 一文解析统计学在机器学习中的重要性(附学习资源)
  3. 整理:各个浏览器及web服务器对URL(get)长度的限制
  4. 如何在 MacOS 环境下搭建 SVN 服务端环境
  5. linux mysql密码转义_linux忘记mysql密码处理方法
  6. DSB2017第一名代码尝试运行(记录自用)(四)
  7. [bzoj3450]Tyvj1952 Easy[概率dp]
  8. 现在的孩子为什么厌学的那么多?孩子厌学了怎么办?
  9. js Date 日期函数
  10. 案例分享:Windows Phone上的移动浏览体验
  11. 计算机应用技术与英语相关性,浅析计算机应用的技术专业的计算机专业英语的教学改进.doc...
  12. Laravel 使用百度地图实现地理位置转经纬度
  13. 医保支付平台项目建设方案
  14. 数贝携手付晓岩老师带你玩转“企业架构”
  15. 如何在Mac os X上搭建本地服务器环境
  16. 微信小程序云开发数据库操作
  17. 详解共享锁(S锁)和排它锁(X锁)
  18. 计算机组成原理db和dw,汇编中的DW是什么意思那DB 它们什么作用
  19. 【贪心算法】加勒比海盗船——最优装载问题
  20. php抓取天眼查,python用xpath采集天眼查内容,有反爬,zip拼数据

热门文章

  1. 计算机专业论文设计与实现,计算机专业论文 计算机网络的设计与实现.doc
  2. android标题栏的属性,android – 属性“titleTextStyle”已经定义?
  3. if __name__ == __main__:什么意思_秒懂Python编程中的if __name__ == 'main' 的作用和原理...
  4. mysql优化插入速度的方法_优化MySQL插入方法的五个妙招
  5. java this() super()_java中的this和super
  6. was6 linux 卸载,重新安装was61
  7. 互联网日报 | 7月3日 星期六 | 滴滴回应被网络安全审查;小米启动“青年工程师激励计划”;阿里成立生活服务板块...
  8. 2020年短视频及电商直播趋势报告
  9. 百度平台K12人群洞察报告
  10. 水环境模型与大数据技术融合研究