在 Python 的 PDF 处理工具中,pdfrw是一款轻量级但功能颇为强劲的库。它提供了一系列方法来处理 PDF 文件,如读取、写入、修改和合并等操作。与一些体积较大的 PDF 处理库相比,pdfrw的优势在于其轻量级特性,使得它在处理 PDF 文件时更为灵活和高效。接下来,我们将深入了解pdfrw库的各项功能。
一、安装 pdfrw
在使用pdfrw之前,需要先通过pip进行安装:
bash
pip install pdfrw
二、读取 PDF 信息
1. 读取基本元数据
pdfrw可以轻松获取 PDF 文件的基本元数据,如标题、作者、创建日期等。以下是示例代码:
python
import pdfrw
def get_pdf_metadata(pdf_path):
pdf = pdfrw.PdfReader(pdf_path)
metadata = pdf.Info
for key, value in metadata.items():
print(f"{key}: {value}")
pdf_path = 'example.pdf'
get_pdf_metadata(pdf_path)
在上述代码中,pdfrw.PdfReader(pdf_path)用于读取指定路径的 PDF 文件,pdf.Info则获取该 PDF 的元数据信息,并通过循环打印出来。
2. 读取页面内容(简单文本提取)
虽然pdfrw不像专门的文本提取库那样功能全面,但它也能进行简单的文本提取。下面是一个简单示例:
python
import pdfrw
def extract_text_from_pdf(pdf_path):
pdf = pdfrw.PdfReader(pdf_path)
text = ''
for page in pdf.pages:
if '/Annots' in page:
for annot in page.Annots:
if annot.get('/Subtype') == '/Text':
text += annot.get('/Contents', '')
return text
pdf_path = 'example.pdf'
extracted_text = extract_text_from_pdf(pdf_path)
print(extracted_text)
此代码通过遍历 PDF 的每一页,检查页面中的注释(Annots),如果注释类型为文本(/Subtype == /Text),则提取其内容。不过要注意,这种方法提取的文本可能不完整或格式与原 PDF 有差异,适用于简单文本提取场景。
三、写入与修改 PDF
1. 添加注释
pdfrw可以在 PDF 页面上添加注释。以下是在第一页添加文本注释的示例:
python
import pdfrw
ANNOT_KEY = '/Annots'
ANNOT_FIELD_KEY = '/T'
ANNOT_TEXT_KEY = '/Contents'
SUBTYPE_KEY = '/Subtype'
WIDGET_SUBTYPE_KEY = '/Widget'
def add_note_to_pdf(pdf_path, output_path, note_text):
pdf = pdfrw.PdfReader(pdf_path)
page = pdf.pages[0]
if not hasattr(page, ANNOT_KEY):
page[ANNOT_KEY] = pdfrw.PdfArray()
annot = pdfrw.PdfDict()
annot[SUBTYPE_KEY] = WIDGET_SUBTYPE_KEY
annot[ANNOT_FIELD_KEY] = 'My Note'
annot[ANNOT_TEXT_KEY] = note_text
annot['/Rect'] = pdfrw.PdfArray([100, 100, 200, 120])
page.Annots.append(annot)
pdfrw.PdfWriter().write(output_path, pdf)
pdf_path = 'example.pdf'
output_path = 'annotated_example.pdf'
note_text = '这是一个新添加的注释'
add_note_to_pdf(pdf_path, output_path, note_text)
在这段代码中:
- 第一读取 PDF 文件并获取第一页。
- 检查页面是否已有注释,如果没有则创建一个空的注释数组。
- 创建一个新的注释字典,设置注释类型、字段名、文本内容以及注释在页面上的位置(/Rect)。
- 将新注释添加到页面的注释数组中,并使用pdfrw.PdfWriter().write()将修改后的 PDF 保存到新文件。
2. 修改现有注释
如果要修改 PDF 中已有的注释内容,示例代码如下:
python
import pdfrw
ANNOT_KEY = '/Annots'
ANNOT_FIELD_KEY = '/T'
ANNOT_TEXT_KEY = '/Contents'
def modify_note_in_pdf(pdf_path, output_path, new_note_text):
pdf = pdfrw.PdfReader(pdf_path)
for page in pdf.pages:
if '/Annots' in page:
for annot in page.Annots:
if annot.get('/Subtype') == '/Widget' and annot.get(ANNOT_FIELD_KEY) == 'My Note':
annot[ANNOT_TEXT_KEY] = new_note_text
pdfrw.PdfWriter().write(output_path, pdf)
pdf_path = 'annotated_example.pdf'
output_path ='modified_annotated_example.pdf'
new_note_text = '这是修改后的注释内容'
modify_note_in_pdf(pdf_path, output_path, new_note_text)
该代码遍历 PDF 的每一页及其注释,找到特定字段名(My Note)的注释,并修改其文本内容,最后保存修改后的 PDF。
四、合并 PDF
使用pdfrw合并多个 PDF 文件也很方便。以下是实现代码:
python
import pdfrw
def merge_pdfs(pdf_paths, output_path):
writer = pdfrw.PdfWriter()
for pdf_path in pdf_paths:
pdf = pdfrw.PdfReader(pdf_path)
for page in pdf.pages:
writer.addpage(page)
writer.write(output_path)
pdf_paths = ['pdf1.pdf', 'pdf2.pdf']
output_path ='merged.pdf'
merge_pdfs(pdf_paths, output_path)
此代码通过pdfrw.PdfWriter()创建一个写入器对象,然后遍历每个要合并的 PDF 文件,将其每一页添加到写入器中,最后将合并后的内容写入到输出文件。
pdfrw以其轻量级和灵活性,为 Python 开发者提供了一种便捷的 PDF 处理方式。虽然它在功能的全面性上可能不及一些大型 PDF 处理库,但在处理简单的 PDF 读取、写入、修改和合并任务时,pdfrw表现出色。无论是处理日常办公中的 PDF 文件,还是在开发小型应用程序时涉及 PDF 操作,pdfrw都值得一试。













暂无评论内容