Python 中的 PDF 處理

Python 被認為是一種極其靈活的編程語言,擁有廣泛的庫,是一種高級語言,具有易於閱讀和編寫的語法。Python 的範圍正在不同的領域擴展,如機器學習、網絡開發、網絡安全、應用開發等等。因此,這種編程語言在程序員、工程師和開發人員中被廣泛選擇。

在下面的教程中,我們將在 Python 編程語言的幫助下處理 pdf。pdf,縮寫為便攜式文檔格式,是一種包含文本、表格、圖像等的文檔文件格式,通常在我們需要保存無法進一步修改或易於共享或打印的文件時使用。 PDF 文件格式是由 Adobe 在 1993 年開發的,目的是以獨立於軟件、應用、操作系統和硬件的方式呈現包含格式化文本和圖像的文檔。

為了讓我們更好地理解與使用 Python 處理 PDF 相關的所有內容,下面的教程被分成了不同的部分。

那麼,讓我們開始吧。

一些著名的 Python PDF 庫

Python 提供了大量用於操作 PDF 文件的庫。處理 pdf 時通常使用的一些著名庫有:

  1. PDFMiner,
  2. PyPDF4,
  3. PyPDF2,
  4. Python-docx,
  5. PyMuPDF,

還有更多。

雖然在 Python 中使用不同的包來對 PDF 執行不同的功能操作,但我們將只討論一些庫的工作,如 PDFMiner、PyPDF2、PyMuPDF、reportlab、以及本教程中的其他一些庫。 PyPDF2 被認為是廣泛選擇的與 PDF 一起工作的 Python 模塊之一。該軟件包易於使用,並提供各種功能。但是,當我們談論文本提取時, PDFMiner 包更加精確和可靠。 PDFMiner 是專門為用戶從 PDF 文件中提取文本而設計的。當我們考慮 PDF 文件操作時,有不同的場景,其中一個包在不同方面比另一個包更有效。因此,在本教程中,我們將根據 PDF 文件的舒適性和可靠性來討論用於操作 PDF 文件的不同庫。

使用 Python 從 pdf 中提取文本

pdf 由各種內容組成,如文本、表格、圖像、表單等。這些文件是數據的圖形解釋。他們提供關於顯示器或紙張確切位置的信息。然而,它們沒有為句子或段落指定的邏輯結構,並且當顯示的大小改變時,它們不能自我調整。 PDFMiner 包通過評估布局和預測文本和其他內容的位置來為用戶執行工作。

PDFMiner 被認為是用來執行從 PDF 文件中提取文本等操作的健壯庫之一。因此,在下一節中,我們將演示 PDFMiner 用於文本提取的用法。

首先我們要安裝 PDFMiner 包。

安裝 PDFMiner 包

我們可以使用以下命令安裝 PDFMiner 包:

語法:


$ pip install pdfminer

一旦安裝完成,我們將進入主要部分,使用 PDFMiner 庫提取文本。

讓我們考慮下面的例子,演示如何藉助 Python 中的 PDFMiner 提取文本。

示例:


from io import StringIO
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfparser import PDFParser
O_string = StringIO()
with open('my_file.pdf', 'rb') as input_file:
    my_parser = PDFParser(input_file)
    my_doc = PDFDocument(my_parser)
    rsrcmgr = PDFResourceManager()
    my_device = TextConverter(rsrcmgr, O_string, laparams = LAParams())
    my_interpreter = PDFPageInterpreter(rsrcmgr, my_device)
    for my_page in PDFPage.create_pages(my_doc):
        my_interpreter.process_page(my_page)
print(O_string.getvalue())

輸出:

A Simple PDF File 
 This is a small demonstration .pdf file - 
 just for use in the Virtual Mechanics tutorials. More text. And more 
 text. And more text. And more text. And more text. 
 And more text. And more text. And more text. And more text. And more
 text. And more text. Boring, zzzzz. And more text. And more text. And
 more text. And more text. And more text. And more text. And more text.
 And more text. And more text.
 And more text. And more text. And more text. And more text. And more
 text. And more text. And more text. Even more. Continued on page 2 ...
 Simple PDF File 2
 ...continued from page 1\. Yet more text. And more text. And more text.
 And more text. And more text. And more text. And more text. And more
 text. Oh, how boring typing this stuff. But not as boring as watching
 paint dry. And more text. And more text. And more text. And more text.
 Boring.  More, a little more text. The end, and just as well.

說明:

在上面的代碼片段中,我們已經從 IO 庫中導入了 StringIO 模塊,並從 PDFMiner 模塊中導入了所需的函數和類。我們創建了一個 StringIO 對象,並使用 with 語句從目錄中打開 pdf 文件。根據 PDFMiner 文檔, PDFPageInterpreter 用於處理頁面內容,而 PDFResourceManager 用於存儲字體或圖像等共享資源。 PDFPage 用於對數據進行逐頁分析。參數加載字符、文本框、文本行、圖像和圖形的布局分析。在這些幫助下,文本轉換器功能有助於將 PDF 文檔轉換為文本。

我們提供“my _ file . pdf”作為 PDF 文件,在 PDFMiner 模塊的幫助下進行分析和執行。我們可以使用進程頁面功能從 PDF 文件中提取文本。

最後,打印(文本)功能將從 PDF 中打印出提取的文本。因此,以這種方式,可以使用 PDFMiner 庫從 PDF 文件中提取文本。

基於 Python 的 pdf 圖像提取

每當我們想從 PDF 中提取圖像時,我們可以利用 PyMuPDF。這個庫使用了一個額外的模塊, fitz,,這使得從 PDF 文件中提取圖像變得更加容易。在開始直接使用模塊之前,讓我們安裝所需的庫。

安裝 PyMuPDF 包

我們可以使用以下命令安裝 PyMuPDF 包:

語法:


$ pip install pymupdf
$ pip install fitz

一旦安裝完成,我們將進入主要部分,使用 PyMuPDF 庫和 fitz 模塊提取文本。

讓我們考慮下面這個用 Python 演示圖像提取的例子。

示例:


# PyMuPDF
import fitz
import io
from PIL import Image
# path to our input file
my_file = "file2.pdf" 
# Input PDF file
my_pdf = open(my_file)
for page_num in range(len(my_pdf)):
   cur_page = my_pdf[page_num]
   img = cur_page.getImageList()
   for image_num, image in enumerate(cur_page.getImageList()):
       # get the XREF of the image
       xref = image[0]
       # extract the image bytes
       cur_image = my_pdf.extractImage(xref)
       imgBytes = cur_image["image"]
       # get the image extension
       img_ext = cur_image["ext"]
       # load it to PIL
       image = Image.open(io.BytesIO(imgBytes))
       # save it to local disk
       image.save(open(f"page{page_num + 1}_img{image_num}.{img_ext}", "wb"))

輸出:

[+] Found a total of 2 images in page 0
[+] Found a total of 2 images in page 1   

說明:

在上面的代碼片段中,我們已經導入了所需的模塊。然後,我們使用 fitz 模塊加載了 PDF 文件。然後我們一頁一頁地找到圖像列表。然後,我們將 pdf 中的圖像字節轉換為實際圖像,並保存在本地。因此,以這種方式,我們已經從一個 PDF 文件中提取了圖像。

使用 Python 從 pdf 中提取表格

與圖像和文本提取相比,從 PDF 文件中提取表格有點容易。Python 提供了一個預定義的庫,我們可以用它來提取表。因此,在我們開始實現代碼之前,首先有必要安裝這個庫。

安裝卡梅洛特圖書館

我們可以使用 pip 安裝程序使用以下命令安裝 camelot 模塊:

語法:


$ pip install camelot

安裝完成後,讓我們繼續用 Python 從 PDF 文件中提取表格。

示例:


import camelot
# reading the pdf file
my_tables = camelot.read_pdf("my_table.pdf")
print(my_tables[0].df)

說明:

在上面的代碼片段中,我們已經導入了 camelot 庫。然後,我們使用卡梅洛特庫的 read_pdf() 功能從 PDF 文件中提取表格,並將它們作為列表存儲在變量中。最後,我們使用表的索引值和 df 屬性打印了一個提取的表。因此,我們已經成功地從 PDF 文件中提取了表格。

使用 Python 從 pdf 中提取網址

提取網址被認為是 Python 提供的另一個方便的功能。Python 有一個預定義的庫,稱為“pdfx”,,通常用於從 PDF 文件中提取網址。我們可以利用諸如 PDFMiner、PyPDF2、等庫來提取文本,並使用正則表達式來找出網址。然而,這個過程是漫長而忙碌的。因此,為了縮短代碼的長度,我們將使用 pdfx 庫從 PDF 文件中提取網址。

安裝 pdfx 庫

我們可以使用 pip 安裝程序使用以下命令安裝 pdfx 庫:

語法:


$ pip install pdfx

一旦安裝完成,讓我們考慮下面的例子來理解從 pdf 中提取網址。

示例:


import pdfx
# reading the PDF File
my_pdf = pdfx.PDFx("sample-url.pdf")
# get list of URLS
print(my_pdf.get_references_as_dict())

輸出:

{'url': ['https://www.javatpoint.com/python-pass', 'https://www.javatpoint.com/python-tutorial', 'https://www.javatpoint.com/python-seaborn-library', 'https://www.javatpoint.com/', 'https://www.javatpoint.com/chatbot-in-python', 'https://www.javatpoint.com/python-if-else']}  

說明:

在上面的代碼片段中,我們已經導入了 pdfx 庫。然後我們使用 PDFx() 函數從目錄中讀取 PDF 文件。然後我們使用 get_references_as_dict() 函數以字典的形式提取輸入 PDF 文件中所有可用的網址。

使用 Python 從 pdf 中提取頁面作為圖像

在本節中,我們將了解從圖像形式的 PDF 文件中提取頁面。為了完成任務,我們將需要另一個被稱為 pdf2image 的簡短庫。當我們想要將 PDF 文件轉換成圖像時,通常會用到這個庫。

讓我們從安裝庫開始。

安裝 pdf2image 庫

我們可以使用 pip 安裝程序的以下命令來安裝 pdf2image 庫:

語法:


$ pip install pdf2image

一旦安裝完成,讓我們考慮下面的例子來理解 pdf2image 庫的工作。

示例:


from pdf2image import convert_from_path
my_pages = convert_from_path("my_file.pdf", 120) 
n = 0
# iterating through pages
for page in my_pages:
   n += 1
   page.save(f"output{n}.jpg", "JPEG")

說明:

在上面的代碼片段中,我們從 pdf2image 庫中導入了 convert_from_path 函數。然後,我們使用了導入的函數,其中我們提供了值 120。該值稱為 DPI 或每英寸點數。數值越高,圖像越清晰,尺寸越大。我們通過將頁面保存為 JPEG 圖像來遍歷每一頁。


原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/306324.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-02 12:00
下一篇 2025-01-02 12:00

相關推薦

  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29

發表回復

登錄後才能評論