標籤:

PyPDF2 用 Python 操作 PDF

最近需要處理一些 PDF, 簡單來說,就是需要對一些 PDF 進行合併分割等一些操作,由於 PDF 的數量有點多,使用一些 PDF 的工具來處理這個事情,一個個去點擊處理,對於一個 Pythoner 來說,簡直不能更傻了。xchaoinfo 在知乎問題 如何使用自己的編程能力提升生活質量? 回答的說

n

簡單可重複的工作,堅決不做第二次,通通寫個腳本自動化

n

n

果斷直接去 awesome-Python 去找找有沒有 Python 操作 PDF 的優秀的第三方模塊,發現 PyPDF2 滿足我的需求,但是我在網上搜的好多教程都是基於 PyPDF 的,但是 PyPDF 自 2010年 12月開始就不在更新了,PyPDF2 接棒 PyPDF, 並且支持 Py2 Py3 的版本。故寫此文簡單介紹下 PyPDF2,已期對諸君有所益。

本文基於 Python3.4.4 PyPDF2==1.26.0

n

安裝

n

直接使用 pip 安裝就可以了

pip install PyPDF2

n

PyPDF2 包含了 PdfFileReader PdfFileMerger PageObject PdfFileWriter 四個常用的主要 Class。

n

 簡單讀寫 PDF

n

from PyPDF2 import PdfFileReader, PdfFileWriterninfn = infn.pdfnoutfn = outfn.pdfn# 獲取一個 PdfFileReader 對象npdf_input = PdfFileReader(open(infn, rb))n# 獲取 PDF 的頁數npage_count = pdf_input.getNumPages()nprint(page_count)n# 返回一個 PageObjectnpage = pdf_input.getPage(i)nn# 獲取一個 PdfFileWriter 對象npdf_output = PdfFileWriter()n# 將一個 PageObject 加入到 PdfFileWriter 中npdf_output.addPage(page)n# 輸出到文件中npdf_output.write(open(outfn, wb))n

n

應用實例 合併分割 PDF

n

from PyPDF2 import PdfFileReader, PdfFileWriternndef split_pdf(infn, outfn):n pdf_output = PdfFileWriter()n pdf_input = PdfFileReader(open(infn, rb))n # 獲取 pdf 共用多少頁n page_count = pdf_input.getNumPages()n print(page_count)n # 將 pdf 第五頁之後的頁面,輸出到一個新的文件n for i in range(5, page_count):n pdf_output.addPage(pdf_input.getPage(i))n pdf_output.write(open(outfn, wb))nndef merge_pdf(infnList, outfn):n pdf_output = PdfFileWriter()n for infn in infnList:n pdf_input = PdfFileReader(open(infn, rb))n # 獲取 pdf 共用多少頁n page_count = pdf_input.getNumPages()n print(page_count)n for i in range(page_count):n pdf_output.addPage(pdf_input.getPage(i))n pdf_output.write(open(outfn, wb))nnif __name__ == __main__:n infn = infn.pdfn outfn = outfn.pdfn split_pdf(infn, outfn)n

n

應用實例源代碼可以在 github.com/xchaoinfo/Py 找到。

Refer: PyPDF2 Documentation


推薦閱讀:

為什麼有的時候使用 Chrome 新標籤頁打開 PDF 可以瀏覽並下載材料,但是原鏈接是讓點擊下載卻常常下載不了?
從pdf中複製文本到其他程序中時, 文字總是自動換行,有沒有什麼解決辦法?
誰能簡單說下PDF格式標準?
能替代acrobat的PDF編輯軟體有哪些?
有哪些好用的pdf虛擬印表機推薦?

TAG:Python | PDF |