天天看點

python讀取pdf表格_用Python顯示和處理PDF檔案

python讀取pdf表格_用Python顯示和處理PDF檔案

pdf是電子書,文檔經常會用的格式,除了下載下傳各種閱讀器以外,我們也可以用Python批量處理大量PDF檔案。本文用到了pypdf2,pdfminer.six,pdf2image來做正常處理。

pypdf2 擷取pdf的基本資訊,如作者,書名,頁數等

5 from PyPDF2 import PdfFileReader

6

7 def extract_information(pdf_path,filename):

8     try:

9         with open(pdf_path, 'rb') as f:

10             pdf = PdfFileReader(f)

11             information = pdf.getDocumentInfo()

12             number_of_pages = pdf.getNumPages()

13

14             title=filename.split('.pdf')[0]

15             if information.title is not None and len(information.title)>0:

16                 title=information.title

17             print(f"{title} page : {number_of_pages}")

18     except Exception as e:

19         pass

基于文字的PDF

pdfminer.six 可以取出文本

8 from io import StringIO

9 from pdfminer.layout import LAParams

10 from pdfminer.high_level import extract_text_to_fp

16   def get_text(path):

17     output_string = StringIO()

18     with open(path, 'rb') as fin:

19         extract_text_to_fp(fin, output_string)

20     print(output_string.getvalue().strip())

基于掃描圖檔的PDF

pdf2image 可以提出所有頁面存為圖檔,但因為IO的性能問題。作者提出最好用SSD硬碟和多線程。

6 from pdf2image import convert_from_path

12 def get_cover(path,filename):

13     images=convert_from_path(path)

14     images[0].save(filename+'.jpg')

上面的代碼把封面(第一頁)取了出來,儲存為圖檔

批量處理

我們可以用Python自帶的檔案處理功能,結合上面的三個函數,批量處理books目錄下的大量pdf檔案。

38 if __name__ == '__main__':

39     book_folder=os.path.join(Path.home(),'books')

40     for pdf in os.listdir(book_folder):

41         if pdf.endswith('.pdf'):

42             path=os.path.join(book_folder,pdf)

43             title,page=extract_information(path,pdf)

44             if page>0 and page<50:

45                 get_text(path)

46             get_cover(path,pdf)

python讀取pdf表格_用Python顯示和處理PDF檔案