You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyMuPDF(fitz)操作PDF插入关键词图片报Document无searchFor属性错误

报错根因
  • searchFor是PyMuPDF库中单页Page对象的文本搜索方法,你的代码中把整个Document文档对象赋值给page变量后直接调用方法,自然找不到对应属性。另外新版PyMuPDF已经将驼峰格式的旧APIsearchFor重命名为蛇形格式的search_for,旧方法在高版本中已经被移除。
  • 原有代码存在多处逻辑错误:遍历PDF路径字符串而非文档内页、提前搜索空字符串再固定判断文本值、输出路径未指向原文件所在目录、未做文件选中校验容易触发空路径报错。
修正后完整代码
import os
import fitz
from tkinter import filedialog

# 弹出文件选择框选PDF
main_win.sourceFile = filedialog.askopenfilename(
    parent=main_win,
    initialdir="/",
    title="请选择要处理的PDF文件",
    filetypes=[("PDF文件", "*.pdf")]
)

# 未选择文件直接终止流程
if not main_win.sourceFile:
    exit()

# 加载选中的PDF文档
document = fitz.open(main_win.sourceFile)

# 配置项:印章路径、插入位置、输出文件名
orange_stamp = "Orange county stamp.png"
hillsborough_stamp = "Hillsborough county stamp.png"
# 图片放置的矩形区域坐标,可根据印章实际尺寸调整
stamp_rect = fitz.Rect(55, 28, 180, 390)
# 拼接原文件所在目录下的输出路径
source_dir = os.path.dirname(main_win.sourceFile)
output_path = os.path.join(source_dir, "处理完成.pdf")

# 逐页扫描处理
for page in document:
    # 检测当前页是否包含目标关键词
    has_orange = page.search_for("Orange County")
    has_hillsborough = page.search_for("Hillsborough county")

    if has_orange:
        page.insert_image(stamp_rect, filename=orange_stamp)
    if has_hillsborough:
        page.insert_image(stamp_rect, filename=hillsborough_stamp)

# 保存文件并释放资源
document.save(output_path)
document.close()
使用注意事项
  • 运行前先安装依赖:执行命令pip install pymupdf,不要单独安装名为fitz的第三方包,会出现API冲突。
  • 两个印章图片请和脚本放在同一目录下,或者填写图片的完整绝对路径,否则会触发文件找不到错误。
  • 如果需要忽略关键词大小写匹配,可以先提取页面全量文本转小写后再做匹配,比如用page_text = page.get_text().lower()判断关键词小写是否在文本内即可。
  • 若同一页同时包含两个关键词,代码会在该页插入两个印章,如有优先级需求可自行调整判断逻辑。

内容的提问来源于stack exchange,提问作者Zac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.16 16:15:41