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

Python提取PDF文本替换cid标记及加密PDF解密技术问询

问题解答

1. 替换PDF提取文本中的(cid:<数字>)字符

PDF里的(cid:<数字>)是字符ID引用,对应字体文件里的字形,通常是提取工具没正确解析字体字符映射表导致的。用pdfplumber可以直接获取解析后的字符,不用手动替换,修改你的parse函数即可:

def parse(self, response):
    pdf = pdfplumber.open(io.BytesIO(response.body))
    extract_text = ""
    # 遍历每页,直接获取解析后的字符
    for page in pdf.pages:
        for char in page.chars:
            extract_text += char["text"]
    pdf.close()
    # 后续处理extract_text

如果pdfplumber仍解析失败,试试PyMuPDF(fitz),它对字体映射的支持更全面:

import fitz

def parse(self, response):
    doc = fitz.open("pdf", response.body)
    extract_text = ""
    for page in doc:
        extract_text += page.get_text()
    doc.close()
    # 后续处理extract_text

2. 加密PDF的处理方法

你提到的世界银行PDF加密后无法提取内容,注意:

  • 合法前提下,只有拿到该文档的访问密码才能解密提取内容。建议去文档对应的页面查看是否有公开的无加密版本,或者通过官方渠道申请访问权限。
  • 任何破解第三方加密PDF的行为都可能涉及版权和法律风险,不建议尝试。

在代码里可以添加加密检测的异常处理:

def parse(self, response):
    try:
        pdf = pdfplumber.open(io.BytesIO(response.body))
        extract_text = ""
        for page in pdf.pages:
            for char in page.chars:
                extract_text += char["text"]
        pdf.close()
        return extract_text
    except Exception as e:
        if "encrypted" in str(e).lower():
            print("PDF已加密,需获取访问密码才能提取内容")
        else:
            print(f"提取失败:{str(e)}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 20:44:55