在 Python 中操作 PDF 文件的常用方法是使用专门的第三方库。这些库可以帮助你完成常见的操作,如读取 PDF 内容、提取文本、合并和拆分 PDF 文件、修改文件等。常用的库包括 PyPDF2
、pdfminer
、reportlab
等。下面是一些常见任务的示例。
1. 安装所需库
首先,需要安装必要的库。你可以使用以下命令来安装这些库:
pip install PyPDF2
pip install pdfminer.six
pip install reportlab
2. 使用 PyPDF2
操作 PDF 文件
PyPDF2
是一个非常流行的库,支持对 PDF 文件进行合并、拆分、加密、解密、旋转等操作。
2.1 合并多个 PDF 文件
import PyPDF2
# 创建一个 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 文件的页数
total_pages = len(reader.pages)
# 创建一个 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 文件内容:")
print(text)
3. 使用 pdfminer
提取 PDF 文本
pdfminer.six
是一个专注于从 PDF 中提取文本的库,比 PyPDF2
更适合复杂的文本提取操作。它支持从 PDF 中提取文本和元数据。
3.1 提取 PDF 文件中的文本
from pdfminer.high_level import extract_text
# 提取 PDF 文件中的文本
text = extract_text('sample.pdf')
print("提取的文本内容:")
print(text)
4. 使用 reportlab
创建 PDF 文件
reportlab
是一个非常强大的库,主要用于生成 PDF 文件。它提供了丰富的 API 来设计和生成 PDF。
4.1 创建一个简单的 PDF 文件
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
# 创建一个 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()
# 调用函数生成 PDF 文件
create_pdf("output.pdf")
print("PDF 文件创建完成!")
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 文件(带图像)创建完成!")
5. 使用 PyMuPDF
(fitz) 提取文本
PyMuPDF
是一个处理 PDF、XPS、EPUB 等文件格式的库,功能非常强大且效率较高。你可以使用它来提取文本、图像和其他内容。
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 文件的内容:")
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)
# 设置密码
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)
# 创建一个 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 文件解密完成!")
总结
使用 Python 处理 PDF 文件是非常常见的任务,通过不同的库,你可以实现 PDF 的各种操作:
PyPDF2
:用于合并、拆分、加密、解密和提取文本。pdfminer.six
:专注于从 PDF 中提取文本,适合需要复杂文本解析的场景。reportlab
:用于生成 PDF 文件,支持绘图、添加文本、图片等。PyMuPDF
(fitz):支持高效地提取文本、图像等,并处理 PDF 文件。