Python中操作PDF文件的常用方法
1. 安裝所需庫
首先,需要安裝必要的庫。你可以使用以下命令來安裝這些庫:
pip install PyPDF2 pip install pdfminer.six pip install reportlab
2. 使用 PyPDF2 操作 PDF 文件
PyPDF2 是一個非常流行的庫,支持對 PDF 文件進行合并、拆分、加密、解密、旋轉(zhuǎn)等操作。
2.1 合并多個 PDF 文件
import PyPDF2
# 創(chuàng)建一個 PDF 合并器對象
pdf_merger = PyPDF2.PdfMerger()
# 需要合并的 PDF 文件列表
pdf_files = ['file1.pdf', 'file2.pdf', 'file3.pdf']
# 合并 PDF 文件
for pdf in pdf_files:
pdf_merger.append(pdf)
# 輸出合并后的 PDF 文件
pdf_merger.write('merged_output.pdf')
pdf_merger.close()
print("PDF 文件合并完成!")2.2 拆分 PDF 文件
import PyPDF2
# 打開 PDF 文件
with open('sample.pdf', 'rb') as file:
reader = PyPDF2.PdfReader(file)
# 獲取 PDF 文件的頁數(shù)
total_pages = len(reader.pages)
# 創(chuàng)建一個 PDF 寫入器對象
writer = PyPDF2.PdfWriter()
# 拆分為每一頁一個 PDF 文件
for page_num in range(total_pages):
writer.add_page(reader.pages[page_num])
# 寫入到新的 PDF 文件
with open(f'page_{page_num + 1}.pdf', 'wb') as output_file:
writer.write(output_file)
print("PDF 文件拆分完成!")2.3 提取 PDF 文件的文本
import PyPDF2
# 打開 PDF 文件
with open('sample.pdf', 'rb') as file:
reader = PyPDF2.PdfReader(file)
text = ""
# 提取所有頁的文本
for page_num in range(len(reader.pages)):
page = reader.pages[page_num]
text += page.extract_text()
print("PDF 文件內(nèi)容:")
print(text)3. 使用 pdfminer 提取 PDF 文本
pdfminer.six 是一個專注于從 PDF 中提取文本的庫,比 PyPDF2 更適合復(fù)雜的文本提取操作。它支持從 PDF 中提取文本和元數(shù)據(jù)。
3.1 提取 PDF 文件中的文本
from pdfminer.high_level import extract_text
# 提取 PDF 文件中的文本
text = extract_text('sample.pdf')
print("提取的文本內(nèi)容:")
print(text)4. 使用 reportlab 創(chuàng)建 PDF 文件
reportlab 是一個非常強大的庫,主要用于生成 PDF 文件。它提供了豐富的 API 來設(shè)計和生成 PDF。
4.1 創(chuàng)建一個簡單的 PDF 文件
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
# 創(chuàng)建一個 PDF 文件并繪制文本
def create_pdf(output_filename):
c = canvas.Canvas(output_filename, pagesize=letter)
c.drawString(100, 750, "Hello, this is a simple PDF created with ReportLab!")
c.save()
# 調(diào)用函數(shù)生成 PDF 文件
create_pdf("output.pdf")
print("PDF 文件創(chuàng)建完成!")4.2 在 PDF 中添加圖像
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
def create_pdf_with_image(output_filename):
c = canvas.Canvas(output_filename, pagesize=letter)
c.drawString(100, 750, "Here is an image below:")
# 添加圖像
c.drawImage("image.jpg", 100, 500, width=200, height=150) # 圖像位置和大小
c.save()
create_pdf_with_image("pdf_with_image.pdf")
print("PDF 文件(帶圖像)創(chuàng)建完成!")5. 使用 PyMuPDF (fitz) 提取文本
PyMuPDF 是一個處理 PDF、XPS、EPUB 等文件格式的庫,功能非常強大且效率較高。你可以使用它來提取文本、圖像和其他內(nèi)容。
5.1 提取 PDF 文件的文本
import fitz # PyMuPDF
# 打開 PDF 文件
doc = fitz.open('sample.pdf')
# 提取所有頁面的文本
text = ""
for page_num in range(len(doc)):
page = doc.load_page(page_num)
text += page.get_text()
print("PDF 文件的內(nèi)容:")
print(text)6. 對 PDF 文件進行加密和解密
6.1 使用 PyPDF2 對 PDF 進行加密
import PyPDF2
# 打開 PDF 文件
with open('sample.pdf', 'rb') as file:
reader = PyPDF2.PdfReader(file)
writer = PyPDF2.PdfWriter()
# 將 PDF 中的所有頁面添加到 writer 對象中
for page in reader.pages:
writer.add_page(page)
# 設(shè)置密碼
password = "your_password"
writer.encrypt(password)
# 寫入加密后的文件
with open('encrypted_sample.pdf', 'wb') as encrypted_file:
writer.write(encrypted_file)
print("PDF 文件加密完成!")6.2 使用 PyPDF2 對 PDF 進行解密
import PyPDF2
# 打開加密的 PDF 文件
with open('encrypted_sample.pdf', 'rb') as file:
reader = PyPDF2.PdfReader(file)
# 解密 PDF 文件
password = "your_password"
if reader.is_encrypted:
reader.decrypt(password)
# 創(chuàng)建一個 PDF 寫入器對象
writer = PyPDF2.PdfWriter()
# 將解密后的頁面添加到寫入器中
for page in reader.pages:
writer.add_page(page)
# 輸出解密后的 PDF 文件
with open('decrypted_sample.pdf', 'wb') as decrypted_file:
writer.write(decrypted_file)
print("PDF 文件解密完成!")總結(jié)
使用 Python 處理 PDF 文件是非常常見的任務(wù),通過不同的庫,你可以實現(xiàn) PDF 的各種操作:
PyPDF2:用于合并、拆分、加密、解密和提取文本。pdfminer.six:專注于從 PDF 中提取文本,適合需要復(fù)雜文本解析的場景。reportlab:用于生成 PDF 文件,支持繪圖、添加文本、圖片等。PyMuPDF(fitz):支持高效地提取文本、圖像等,并處理 PDF 文件。
以上就是Python中操作PDF文件的常用方法的詳細內(nèi)容,更多關(guān)于Python操作PDF文件的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python中torch.load()加載模型以及其map_location參數(shù)詳解
torch.load()作用用來加載torch.save()保存的模型文件,下面這篇文章主要給大家介紹了關(guān)于Python中torch.load()加載模型以及其map_location參數(shù)的相關(guān)資料,需要的朋友可以參考下2022-09-09
python Pandas高級功能之?dāng)?shù)據(jù)透視表和字符串操作
Pandas是Python中用于數(shù)據(jù)處理和分析的強大庫,這篇文章將深入探討Pandas庫的高級功能:數(shù)據(jù)透視表和字符串操作,需要的朋友可以參考下2023-07-07
Python數(shù)據(jù)結(jié)構(gòu)列表
這篇文章主要介紹了Python數(shù)據(jù)結(jié)構(gòu)列表,本文重點內(nèi)容主要是對列表數(shù)據(jù)結(jié)構(gòu)的使用,在Python中,序列是一組按順序排列的值。Python?有?3?種內(nèi)置的序列類型:字符串、?元組和列表,下面一起進入文章了解更詳細內(nèi)容吧,需要的小伙伴可以參考一下</P><P>2021-12-12
Django 接收Post請求數(shù)據(jù),并保存到數(shù)據(jù)庫的實現(xiàn)方法
今天小編就為大家分享一篇Django 接收Post請求數(shù)據(jù),并保存到數(shù)據(jù)庫的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07
vscode pycharm配置miniconda環(huán)境全過程
本文介紹了在Mac上通過Homebrew安裝Miniconda并配置VSCode和PyCharm環(huán)境的方法,包括刪除環(huán)境、配置Python插件和選擇解釋器等步驟2025-10-10
Python??序列化反序列化和異常處理的問題小結(jié)
這篇文章主要介紹了Python?序列化反序列化和異常處理,本文結(jié)合示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-12-12
python中ndarray數(shù)組的索引和切片的使用
本文主要介紹了python中ndarray數(shù)組的索引和切片的使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
python創(chuàng)建字典(dict)的幾種方法小結(jié)(含代碼示例)
字典(Dictionary)是Python中一種非常靈活的數(shù)據(jù)結(jié)構(gòu),用于存儲鍵值對(key-value pairs),在Python中創(chuàng)建字典有多種方法,每種方法都有其特定的使用場景和優(yōu)勢,本文將詳細介紹Python中創(chuàng)建字典的幾種常見方法,需要的朋友可以參考下2024-09-09

