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

如何用Python将PDF中的网页链接转为不可点击的普通文本?

解决PDF超链接转为普通文本的Python方案

核心问题分析

你之前用PyPDF2无效,是因为PyPDF2对PDF注解(包括超链接)的支持有限,无法识别或处理所有类型的链接结构。推荐使用PyMuPDF(fitz),它基于MuPDF引擎,对PDF的解析和操作更全面,能有效处理各类超链接注解。


方法一:保留格式,删除链接注解(推荐)

这个方法会移除所有可点击的链接注解,但完全保留原文本和排版格式。

  1. 先安装依赖:
pip install pymupdf
  1. 实现脚本:
import fitz  # 导入PyMuPDF库

def remove_pdf_hyperlinks(input_pdf, output_pdf):
    # 打开目标PDF文档
    doc = fitz.open(input_pdf)
    
    # 遍历每一页处理链接
    for page in doc:
        # 获取当前页面所有超链接
        links = page.get_links()
        for link in links:
            # 删除对应的链接注解
            page.delete_link(link)
    
    # 保存处理后的PDF
    doc.save(output_pdf)
    doc.close()

# 调用示例:替换成你的输入输出路径
remove_pdf_hyperlinks("your_input.pdf", "output_no_links.pdf")

方法二:重写文本(适合特殊格式PDF)

如果方法一无效(比如部分PDF的链接是嵌入在文本动作而非注解中),可以尝试提取文本后重新写入页面,这种方式会丢失部分排版格式,但能确保所有链接失效。

import fitz

def convert_links_to_plain_text(input_pdf, output_pdf):
    doc = fitz.open(input_pdf)
    # 遍历所有页面
    for idx in range(len(doc)):
        page = doc[idx]
        # 提取页面纯文本
        plain_text = page.get_text()
        # 创建新页面,尺寸与原页面一致
        new_page = doc.new_page(width=page.rect.width, height=page.rect.height)
        # 复制原页面的背景/非文本元素(可选,若不需要可跳过)
        new_page.show_pdf_page(new_page.rect, doc, idx)
        # 插入纯文本(可调整字体、字号、位置适配原格式)
        new_page.insert_text(fitz.Point(36, 36), plain_text, fontsize=10)
        
        # 替换原页面
        doc.delete_page(idx)
        doc.insert_page(idx, new_page)
    
    doc.save(output_pdf)
    doc.close()

# 调用示例
convert_links_to_plain_text("your_input.pdf", "output_plain_text.pdf")

关键说明

  • 方法一优先使用,因为它完全保留原PDF的排版、字体、格式,仅移除可点击的链接属性。
  • 若遇到加密PDF,需先解密后再处理(PyMuPDF支持通过doc.authenticate("密码")解密)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 08:24:53