常用PDF庫總結

RolandHe發表於2024-09-16

本帖內容源自 , 在此僅做記錄
PDF(Portable Document Format)是一種便攜文件格式,便於跨作業系統傳播文件。PDF文件遵循標準格式,因此存在很多可以操作PDF文件的工具,Python自然也不例外。本文從功能、開源協議及社群活躍度三方面對比7個常用的Python第三方庫,以便根據具體需求選擇合適的庫。

常見PDF庫
PyPDF2 (已不再維護,繼任者PyPDF4)
由於PyPDF2似乎更知名,故本文以其作為條目列出。

PyPDF、PyPDF2及PyPDF4的淵源
pdfrw
自身不能建立新內容,但是整合了ReportLab,可以相容ReportLab生成新頁面。

ReportLab
商業版的開源版本,專業建立PDF內容如文字、圖表等。

pikepdf
基於C++的QPDF,對標PyPDF2和pdfrw;偏向PDF底層。

pdfplumber
基於pdfminer.six,除了讀取文字、形狀(矩形、直線/曲線)外,還能解析表格。

幾個提取PDF表格的Python庫的對比。
pdfminer.six
pdfminer的社群維護版(pdfminer自2020年起不再積極維護)。

PyMuPDF
基於mupdf,功能全面,並以處理速度著稱[3]。

borb
純Python庫,支援讀、寫、操作PDF文件,兼顧底層和高階應用。

對比
本文將Python操作PDF的能力從大粒度上分成提取內容、操作頁面和建立內容三方面。前兩者分別是針對已經存在的PDF文件的讀和寫操作,最後一項從內容上建立新文件。

提取內容如文字、圖片、元資訊
操作頁面特指操作已經存在的頁面,例如分割、合併、裁剪、旋轉等
建立內容指建立或修改頁面內容,例如文字、圖片、形狀
考慮到時效性,以下對比列出了撰寫本文時(2021.01)相應的最新版本。修訂:borb於 2022.06 新加入對比,時間點以此為準。

總結
PyPDF2系列、pdfrw及pikepdf專注對已經存在的PDF的操作(分割、合併、旋轉等),前兩者基本處於停止維護的狀態。
pdfplumber及其依賴pdfminer.six專注PDF內容提取,例如文字(位置、字型及顏色等)和形狀(矩形、直線、曲線),前者還有解析表格的功能。
ReportLab專注PDF頁面內容(文字、圖、表等)的建立。
PyMuPDF和borb同時支援讀、寫及PDF頁面操作,功能最為全面。其中,PyMuPDF尤其以速度快著稱,而borb是新開發並深得好評的庫,潛力無窮。但是,二者同為GPL家族的開源協議,對商用不太友好。

對商用不太友好指的是支援免費使用,但是要求引用其的程式也必須遵守相應協議即開源。如果需要閉源使用的話,需要向作者申請付費的商用授權。

下面是openAI的回答:

  1. PyPDF2:用於處理PDF檔案的開源庫,可以讀取、分割、合併、提取文字和後設資料等操作。
  2. pdfminer:另一個處理PDF檔案的開源庫,可以提取文字、表格和影像。
  3. tabula:用於提取PDF表格的庫,可以輕鬆地從PDF表格中讀取資料。
  4. Camelot:用於從PDF中提取表格的庫,可以自動檢測表格的位置和結構,並可以以多種格式輸出資料。
  5. pdftabextract:用於從PDF檔案中提取表格的庫,支援多種表格佈局和格式,可以輸出為CSV、JSON和Excel格式。
  6. pdf2image:用於將PDF檔案轉換為影像的庫,可以將PDF檔案轉換為JPEG、PNG和TIFF等格式的影像。

最後以下圖結束本文。

相關文章