Python 被認為是一種極其靈活的編程語言,擁有廣泛的庫,是一種高級語言,具有易於閱讀和編寫的語法。Python 的範圍正在不同的領域擴展,如機器學習、網路開發、網路安全、應用開發等等。因此,這種編程語言在程序員、工程師和開發人員中被廣泛選擇。
在下面的教程中,我們將在 Python 編程語言的幫助下處理 pdf。pdf,縮寫為攜帶型文檔格式,是一種包含文本、表格、圖像等的文檔文件格式,通常在我們需要保存無法進一步修改或易於共享或列印的文件時使用。 PDF 文件格式是由 Adobe 在 1993 年開發的,目的是以獨立於軟體、應用、操作系統和硬體的方式呈現包含格式化文本和圖像的文檔。
為了讓我們更好地理解與使用 Python 處理 PDF 相關的所有內容,下面的教程被分成了不同的部分。
那麼,讓我們開始吧。
一些著名的 Python PDF 庫
Python 提供了大量用於操作 PDF 文件的庫。處理 pdf 時通常使用的一些著名庫有:
- PDFMiner,
- PyPDF4,
- PyPDF2,
- Python-docx,
- 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-tw/n/306324.html