在日常工作中,我们可能会遇到需要批量修改或替换 PDF 文件中特定文字的情况。手动处理每一个 PDF 文件不仅费时费力,而且容易出错。使用 Python 可以高效地实现这一任务。本文将介绍如何使用 Python 的 PyPDF2
和 pdfplumber
库来批量替换 PDF 文件中的文字。
准备工作
在开始之前,确保您已安装 PyPDF2
和 pdfplumber
。可以使用以下命令进行安装:
pip install PyPDF2 pdfplumber
代码示例
我们将创建一个程序,读取指定目录中的所有 PDF 文件,并替换文本。这是一个简单的示例,主要用于展示如何实现这一功能。
import os
import PyPDF2
import pdfplumber
def replace_text_in_pdf(input_pdf_path, output_pdf_path, replacements):
"""在指定的 PDF 文件中替换文本并保存为新文件。
参数:
input_pdf_path: 输入 PDF 文件路径
output_pdf_path: 输出新 PDF 文件的路径
replacements: 字典,键为需要替换的文本,值为替换成的文本
"""
with pdfplumber.open(input_pdf_path) as pdf:
new_pdf = PyPDF2.PdfWriter()
for page in pdf.pages:
text = page.extract_text()
if text:
for old_text, new_text in replacements.items():
text = text.replace(old_text, new_text)
# 创建新页面
new_page = PyPDF2.pdf.PageObject.createBlankPage(width=page.width, height=page.height)
new_page.merge_page(PyPDF2.pdf.PageObject.createFromText(text))
new_pdf.add_page(new_page)
# 写入文件
with open(output_pdf_path, "wb") as output_pdf:
new_pdf.write(output_pdf)
def batch_replace_text_in_pdfs(input_dir, output_dir, replacements):
"""批量替换目录中的 PDF 文件中的文本。
参数:
input_dir: 输入文件夹路径
output_dir: 输出文件夹路径
replacements: 字典,键为需要替换的文本,值为替换成的文本
"""
if not os.path.exists(output_dir):
os.makedirs(output_dir)
for filename in os.listdir(input_dir):
if filename.endswith('.pdf'):
input_pdf_path = os.path.join(input_dir, filename)
output_pdf_path = os.path.join(output_dir, filename)
print(f"正在处理文件: {filename}")
replace_text_in_pdf(input_pdf_path, output_pdf_path, replacements)
print(f"已生成文件: {output_pdf_path}")
if __name__ == "__main__":
# 指定需要替换的文本
replacements = {
'旧文本1': '新文本1',
'旧文本2': '新文本2',
}
input_directory = 'path/to/input_directory' # 输入文件夹路径
output_directory = 'path/to/output_directory' # 输出文件夹路径
batch_replace_text_in_pdfs(input_directory, output_directory, replacements)
代码解析
-
导入库:我们导入了
os
、PyPDF2
和pdfplumber
,分别用于文件操作、PDF 操作和文本提取。 -
replace_text_in_pdf
函数:该函数接收输入 PDF 文件路径、输出 PDF 文件路径和替换文本的字典。它首先打开 PDF 文件,然后逐页提取文本并进行文字替换,最后将新生成的页面写入输出文件。 -
batch_replace_text_in_pdfs
函数:该函数遍历指定的输入目录,找到所有的 PDF 文件,并调用replace_text_in_pdf
函数进行处理。它确保输出目录存在,如果不存在则创建。 -
主程序:在主程序中,我们定义了需要替换的文本,并指定输入和输出文件夹路径,最后调用批量处理函数。
总结
通过上述代码,我们可以快速实现批量替换 PDF 中的文本。这仅是一个简单示例,实际应用中可能需要处理更多的细节,例如保留原始格式、执行复杂的文本替换等。希望这对你有所帮助,并激励你在此基础上进行更深入的开发。