背景
某公司给出的模板文件是旧的,抬头信息中的年份不对,原文件(word)已被清理,pdf文件数量巨大,人工手动编辑的工作成本较高,且时间久。通过python代码实现pdf文件的内容编辑。
需要注意,临时编写的代码内容,未经过优化,使用时,请自行调整。
单文件处理
代码如下:
import fitz # PyMuPDF
import os
# 输入和输出文件路径
input_file = r"F:\Users\alex\Desktop\Temp\SourcePDF.pdf"
output_file = r"F:\Users\alex\Desktop\Temp\FinalPDF.pdf"
# 需要替换的内容
target_text = "2023-2024 ******期"
replacement_text = "2024-2025 ******期"
# 字体路径,确保是 TTF 文件,如文字格式没有需求可以不使用此行代码。
font_path = "C:/Windows/Fonts/simhei.ttf"
def replace_text_in_pdf(input_path, output_path, target, replacement, font_path):
# 检查字体文件路径是否存在
if not os.path.exists(font_path):
raise FileNotFoundError(f"字体文件不存在: {font_path}")
doc = fitz.open(input_path) # 打开 PDF 文档
# 遍历每一页进行文本替换
for page in doc:
areas = page.search_for(target) # 查找目标文本位置
# 注册字体,并指定名称
fontname = "simhei"
page.insert_font(fontname=fontname, fontfile=font_path)
for area in areas: # 遍历找到的所有目标文本区域
# 删除原文本:用白色矩形覆盖原区域
page.draw_rect(area, color=(1, 1, 1), fill=(1, 1, 1))
# 插入新文本到覆盖后的区域
page.insert_text(
point=(area.x0, area.y0), # 文本插入位置
text=replacement, # 要插入的新文本
fontsize=18, # 字体大小
fontname=fontname, # 字体名称(必须是 insert_font 注册的名称)
color=(0, 0, 0) # 字体颜色 (黑色)
)
# 保存修改后的 PDF 文件
doc.save(output_path)
print(f"替换完成!新文件保存为:{output_path}")
# 调用替换函数
replace_text_in_pdf(input_file, output_file, target_text, replacement_text, font_path)
目录中多文件批处理
代码如下:
import fitz # PyMuPDF
import os
# 输入目标路径及被处理的文件夹
source_path = r"F:\Users\alex\Desktop\Temp\temp\"
source_folder = "特殊图形资料"
# 拼接输入和输出文件夹路径
input_folder = f"{source_path}\\{source_folder}"
output_folder = f"{source_path}\\{source_folder}_result"
# 确保输出文件夹存在
os.makedirs(output_folder, exist_ok=True)
# 需要替换的内容
target_text = "2023-2024 ******期"
replacement_text = "2024-2025 ******期"
# 字体路径,确保是 TTF 文件
font_path = "C:/Windows/Fonts/simhei.ttf"
def replace_text_in_pdf(input_path, output_path, target, replacement, font_path):
# 检查字体文件路径是否存在
if not os.path.exists(font_path):
raise FileNotFoundError(f"字体文件不存在: {font_path}")
doc = fitz.open(input_path) # 打开 PDF 文档
# 遍历每一页进行文本替换
for page in doc:
areas = page.search_for(target) # 查找目标文本位置W
# 注册字体,并指定名称
fontname = "simhei"
page.insert_font(fontname=fontname, fontfile=font_path)
for area in areas: # 遍历找到的所有目标文本区域
# 删除原文本:用白色矩形覆盖原区域
page.draw_rect(area, color=(1, 1, 1), fill=(1, 1, 1))
# 插入新文本到覆盖后的区域
page.insert_text(
point=(area.x0, area.y0), # 文本插入位置
text=replacement, # 要插入的新文本
fontsize=18, # 字体大小
fontname=fontname, # 字体名称(必须是 insert_font 注册的名称)
color=(0, 0, 0) # 字体颜色 (黑色)
)
# 保存修改后的 PDF 文件
doc.save(output_path)
print(f"替换完成!新文件保存为:{output_path}")
# 遍历输入文件夹中的所有 PDF 文件
for filename in os.listdir(input_folder):
if filename.endswith(".pdf"):
input_file = os.path.join(input_folder, filename)
output_file = os.path.join(output_folder, filename)
replace_text_in_pdf(input_file, output_file, target_text, replacement_text, font_path)
欢迎留言讨论。