PDF 合并軟件要收費?程序員自己做一個
最近,魚皮遇到點麻煩事兒,需要對 幾千個 PDF 文件做統(tǒng)一處理,比如刪除所有 PDF 的前幾頁、或者給所有 PDF 添加封面等。
如果是幾個文件的話,倒可以人工一個一個去操作,但是對于幾千個文件,肯定要利用軟件實現(xiàn)自動化批處理了。
在網上也搜了很多 PDF 批處理的軟件,確實有很多可以滿足需求,但問題是,全部都要收費!而且,一個特么比一個貴??!

那作為一名程序員,何不自己動手、豐衣足食,自己開發(fā)一個批處理 PDF 文件的工具?
決定了!我不僅要做,還要直播做!
為何選擇自己開發(fā)?
一方面是我的需求比較簡單,再加上現(xiàn)在有各種編程類庫,想必自己開發(fā)的成本也不會很高,起碼比手動處理一個個 PDF 好多了。
另一方面是好久沒有寫小工具了,心里癢癢的,想練練手。
當然,還有最重要的一點,就是帶直播間的各位小伙伴感受一下編程的樂趣~
讓我們開始吧!

制作過程
在此之前,我并不了解有哪些處理 PDF 的類庫,因此是真正的完全從零開始 調研 + 開發(fā)!
整個開發(fā)過程大概持續(xù)了半個小時,如果排除安裝環(huán)境、找源文件、直播交流等事情占用的時間,大概 10 分鐘就能完成,真的非常簡單了。
技術選型
首先,要選擇使用何種編程語言和類庫來編寫程序。提到小工具和腳本,我第一時間想到的是用 Python
,可能是 Python 做文件處理的廣告太多了吧哈哈。有一說一,Python 的語法簡單,類庫豐富,用它來開發(fā)小工具的確非常方便。
那如何處理 PDF 文件呢?網上肯定有別人開發(fā)好的工具類庫!于是我去 GitHub 上簡單搜索了下,有沒有同時支持 PDF 修改、合并、頁面刪除的庫,果然搜到了 PyPDF2
,看了下項目介紹,簡直完美符合我的需求,而且用法也很簡單。

因此,確定了,使用 Python 語言 + PyPDF2 進行開發(fā)。
安裝 Python 和類庫
Python 的安裝非常簡單,直接官網下載對應操作系統(tǒng)的安裝包即可。要注意的是,在安裝 Python 時,最好勾選上自動環(huán)境變量配置,省去了自己操作的麻煩。

安裝好 Python 后,可以在控制臺輸入命令來驗證是否安裝成功。
因為等會我們的工具程序依賴 PyPDF2 類庫,所以還要用 Python 自帶的安裝工具 pip
來安裝下它。
pip?install?PyPDF2
安裝好這些后,開始編寫代碼。
編寫代碼
如果只是要實現(xiàn)兩個 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 的起始頁數(shù)。
比如第一個 PDF 只有一頁封面,第二個 PDF 拼接起始頁為第二頁,二者合并,就實現(xiàn)了替換 PDF 文件封面的效果。
最終代碼如下:
from?PyPDF2?import?PdfFileMerger,?PdfFileReader
merger?=?PdfFileMerger()
#?input?函數(shù)接受用戶輸入
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)
上面所有的參數(shù)都是可以修改的,大家甚至可以 開發(fā)一個界面,支持用戶在輸入框設置參數(shù),從而讓工具變得更易用!
調試
開發(fā)的過程中,需要不斷調試,這里我們簡單驗證下結果,觀察 PDF 的合并是否符合預期即可!

好了,以上就是 PDF 處理工具的制作過程。對于程序員來說,編程語言是最好的工具,大家平時可以多利用它們來解決問題、提高工作效率,還能提升自己的編程技能,豈不美哉!
視頻演示:
