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

使用Python抽取PDF页面生成新文件时如何移除其中的锚点链接与超链接

Python抽取PDF页面并删除所有锚点/超链接的实现方案

你当前使用的tmp_page['/Annots'].clear()方法存在两个局限性:

  • 未做字段存在性校验,页面没有注释时会触发KeyError
  • 只能清除注释类超链接,无法处理嵌入内容流的链接、文档级目录锚点、页面级跳转目标

方案1:基于PyPDF2的完善实现

适配你当前使用的PyPDF2库,优化后代码如下:

from PyPDF2 import PdfReader, PdfWriter
from PyPDF2.generic import NameObject

# 读取源PDF
reader = PdfReader("你的源文件路径.pdf")
writer = PdfWriter()

# 配置需要抽取的页码,从0开始计数,示例抽取第1、3、5页
extract_page_indexes = [0, 2, 4]

for page_num in extract_page_indexes:
    page = reader.pages[page_num]
    # 清除页面注释类链接
    if "/Annots" in page:
        page[NameObject("/Annots")].clear()
    # 清除页面绑定的锚点跳转目标
    if "/Dest" in page:
        del page[NameObject("/Dest")]
    writer.add_page(page)

# 清除文档级别的目录、全局锚点配置
writer._root_object.pop("/Outlines", None)
writer._root_object.pop("/Names", None)

# 输出新PDF
with open("生成的无链接文件.pdf", "wb") as f:
    writer.write(f)

注意:该方案对格式特殊、链接嵌入内容流的PDF兼容性一般,残留链接可使用第二种方案处理


方案2:基于PyMuPDF的高兼容实现

使用PyMuPDF(又称fitz)库可以彻底清除所有类型的链接,兼容性更强,处理更稳定。
首先安装依赖:
pip install pymupdf

实现代码:

import fitz

# 打开源PDF
source_doc = fitz.open("你的源文件路径.pdf")
# 新建空PDF存放抽取结果
new_doc = fitz.open()

# 配置需要抽取的页码,从0开始计数,示例抽取第1、3、5页
extract_page_indexes = [0, 2, 4]
for page_idx in extract_page_indexes:
    new_doc.insert_pdf(source_doc, from_page=page_idx, to_page=page_idx)

# 清除所有页面的链接与注释
for page in new_doc:
    # 删除页面所有跳转链接
    for link in page.get_links():
        page.delete_link(link)
    # 可选:删除页面所有注释内容
    for annot in page.annots():
        page.delete_annot(annot)

# 清除文档级目录锚点
new_doc.del_toc()

# 保存优化后的PDF,garbage参数会清理无用残留数据
new_doc.save("生成的无链接文件.pdf", garbage=4, deflate=True)
new_doc.close()
source_doc.close()

内容的提问来源于stack exchange,提问作者Бекзод Абдураимов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:09:03