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

Python实现PDF文本提取与关键词高亮功能技术求助

PDF关键词高亮解决方案(适配技术规范文档)

问题背景

我正在编写一个程序,需实现从PDF中提取文本、搜索关键词并高亮显示,最终生成带有高亮关键词的新PDF。不确定是要先提取文本再重新生成PDF,还是可直接在原PDF中高亮关键词,且需保留原文本格式。曾尝试使用reportlab,但提取文本后丢失了原格式。我是编程新手,可能问题不难解决,但缺乏相关技能。

我是一名电气工程师,需要阅读大量如IEC或NBR(巴西版IEC)这类技术规范文档,该程序将对我帮助很大。

以下是我目前编写的代码:

import PyPDF2

# 打开PDF文件
pdf_file = r"C:\Users\pietro\Desktop\Projects\espectest.pdf"
words = ["Teste"]

# 创建PDF读取器和写入器对象
pdf_reader = PyPDF2.PdfReader(pdf_file)
pdf_writer = PyPDF2.PdfWriter()

# 获取PDF总页数
num_pages = len(pdf_reader.pages)

# 创建空列表存储页面
pages=[]

# 遍历每一页提取文本并添加到写入器
for i in range(num_pages):
    page=pdf_reader.pages[i]
    texto = pdf_reader.pages[i].extract_text()
    pages.append(page)
    pdf_writer.add_page(page)

# 此处需实现关键词高亮并写入新文件

# 保存新PDF
pdf_writer.write("especteste123.pdf")

# 我试过的库:PyPDF2、reportlab、Fitz、PDFPlumber

解决方案

直接在原PDF页面上添加高亮标注是唯一能完整保留原格式的方案,重新生成PDF(如reportlab的方式)必然会丢失排版、字体等关键信息。推荐使用PyMuPDF(即你试过的Fitz),它能精准定位文本坐标并添加高亮,完全不破坏原文档结构。

完整可运行代码

import fitz  # 导入PyMuPDF库,别名fitz

# 配置参数
pdf_path = r"C:\Users\pietro\Desktop\Projects\espectest.pdf"
output_pdf = "especteste123.pdf"
target_words = ["Teste"]
highlight_rgb = (1, 1, 0)  # 高亮颜色:黄色(RGB值范围0-1,可自行调整)

# 打开原PDF文档
doc = fitz.open(pdf_path)

# 遍历每一页处理
for page in doc:
    # 逐个处理要高亮的关键词
    for word in target_words:
        # 查找页面中所有匹配关键词的位置(返回坐标矩形)
        text_boxes = page.search_for(word)
        # 为每个匹配位置添加高亮
        for box in text_boxes:
            # 创建高亮标注
            highlight = page.add_highlight_annot(box)
            # 设置高亮颜色
            highlight.set_colors(stroke=highlight_rgb)
            # 应用修改
            highlight.update()

# 保存修改后的新PDF
doc.save(output_pdf)
doc.close()

关键说明

  1. 精准定位文本:page.search_for(word)会返回关键词在页面上的所有坐标矩形,确保高亮位置准确
  2. 保留原格式:所有操作基于原PDF页面,不会修改原有排版、字体、图片等元素
  3. 颜色自定义:highlight_rgb可自行调整,比如(1,0,0)为红色,(0,1,0)为绿色
  4. 忽略大小写匹配:如果需要不区分大小写搜索,可替换搜索逻辑为:
    import re
    for word in target_words:
        # 用正则匹配忽略大小写的关键词
        matches = re.finditer(re.escape(word), page.get_text(), re.IGNORECASE)
        for match in matches:
            # 获取匹配文本的坐标矩形
            box = page.get_textbox(match.span())
            highlight = page.add_highlight_annot(box)
            highlight.set_colors(stroke=highlight_rgb)
            highlight.update()
    

安装依赖

执行以下命令安装PyMuPDF:

pip install pymupdf

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 22:05:35