python在PDF文件指定的文字下划线

效果展示

原始文件

划线后文件

代码实现

# coding:utf-8
import os

import fitz  # PyMuPDF


def pdf_underline_text(pdf_path, search_text, output_path=None):
    """
    在PDF文件中指定的文字下划线,或高亮显示
    :param pdf_path: PDF文件路径
    :param search_text: 需划线的文字
    :param output_path: 输出路径,默认none
    :return:
    """
    # 拼接特殊字符\n,满足换行时字符串无法匹配的情况
    search_texts = [f'{search_text[:i]}\n{search_text[i:]}' for i in range(1, len(search_text))]
    search_texts.insert(0, search_text)
    if not output_path:
        output_path = f'{os.path.splitext(pdf_path)[0]}_注释{os.path.splitext(pdf_path)[1]}'
    # 打开 PDF 文件
    pdf_document = fitz.open(pdf_path)

    for page_number in range(pdf_document.page_count):
        page = pdf_document[page_number]

        # 在页面上搜索文本
        for text in search_texts:
            text_instances = page.search_for(text)

            # 在找到的文本下划线
            for inst in text_instances:
                # 添加下划线时可以适当增加bottom的值,避免线条贴着文字显示
                inst[3] += 5
                page.add_underline_annot(inst)  # 文本下划线

                # page.add_highlight_annot(inst)  # 文本高亮

    # 保存修改后的 PDF
    pdf_document.save(output_path)
    pdf_document.close()


f_p = r"C:\Users\abc\Desktop\合同.pdf"
pdf_underline_text(f_p, '测试文档')
posted @ 2023-12-05 14:35  cnblogs用户  阅读(136)  评论(0编辑  收藏  举报