You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用Python验证PDF数字签名并提取元信息与签名者姓名?

Python提取PDF数字签名及元信息方案

当然有合适的Python库能帮你完成这项工作!不用局限于Java的iText,我给你推荐几个实用的选项,完全可以复刻Adobe Acrobat提取证书信息和PDF元数据的功能:

1. PyPDF2

这是一个广泛使用的PDF处理库,支持提取数字签名信息和PDF元数据,上手简单。

安装

pip install PyPDF2

示例代码

from PyPDF2 import PdfReader
from cryptography import x509
from cryptography.hazmat.backends import default_backend

# 加载目标PDF文件
reader = PdfReader("你的签名文档.pdf")

# 提取PDF元信息(标题、作者、创建日期等)
print("=== PDF元信息 ===")
metadata = reader.metadata
for key, value in metadata.items():
    print(f"{key}: {value}")

# 提取数字签名及签名者信息
if reader.has_signatures:
    print("\n=== 数字签名信息 ===")
    for signature in reader.signatures:
        # 尝试从签名字典中直接获取姓名
        signer_name = signature.get("/Name", "未直接标注姓名")
        
        # 如果有证书数据,解析证书获取更准确的签名者姓名
        cert_data = signature.get("/Cert")
        if cert_data:
            try:
                cert = x509.load_der_x509_certificate(cert_data, default_backend())
                # 从证书主题中提取通用名称(即签名者姓名)
                common_name = cert.subject.get_attributes_for_oid(x509.NameOID.COMMON_NAME)[0].value
                signer_name = common_name
            except Exception as e:
                print(f"解析证书出错: {e}")
        
        print(f"签名者姓名: {signer_name}")
        print(f"签名日期: {signature.get('/M', '未知')}")
        print("---")
else:
    print("\n该PDF未包含数字签名")

2. PyMuPDF(fitz)

这个库以高效著称,不仅能处理PDF元数据,也能快速提取签名信息,API设计更简洁。

安装

pip install pymupdf

示例代码

import fitz  # PyMuPDF的别名

# 打开PDF文档
doc = fitz.open("你的签名文档.pdf")

# 提取PDF元信息
print("=== PDF元信息 ===")
metadata = doc.metadata
for key, value in metadata.items():
    print(f"{key}: {value}")

# 提取数字签名信息
signatures = doc.get_signatures()
if signatures:
    print("\n=== 数字签名信息 ===")
    for sig in signatures:
        print(f"签名者姓名: {sig.get('name', '未知')}")
        print(f"签名日期: {sig.get('date', '未知')}")
        print(f"签名类型: {sig.get('type', '未知')}")
        print("---")
else:
    print("\n该PDF未包含数字签名")

补充说明

  • 这两个库都是直接解析PDF的内部结构和签名数据,完全不需要计算机视觉技术,和Adobe Acrobat的处理逻辑一致。
  • 如果需要验证签名的有效性(不仅仅是提取信息),也可以基于这些库结合cryptography库做进一步的证书链验证。

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

火山引擎 最新活动