如何从p7m文件中提取内容?Python提取方法咨询
提取p7m文件中的PDF内容
p7m是PKCS#7格式的数字签名容器,里面打包了原始PDF文件——你用PyPDF2处理报错很正常,因为它根本不是加密PDF,是签名封装格式。给你两个实用的提取方案:
方案一:用PyCryptodome库纯Python解析
先装依赖:
pip install pycryptodome
直接用下面的代码提取:
from Crypto.PKCS7 import PKCS7 def extract_pdf_from_p7m(p7m_path, output_pdf_path): with open(p7m_path, 'rb') as f: p7_data = f.read() # 解析PKCS#7容器,跳过签名验证直接提取内容 pk7 = PKCS7() pk7.decrypt(p7_data, None) raw_pdf = pk7.get_content() with open(output_pdf_path, 'wb') as f: f.write(raw_pdf)
调用时传入p7m文件路径和输出PDF路径即可,全程Python处理,不需要额外工具。
方案二:调用openssl命令行(更简单)
Windows、Linux、Mac基本都自带openssl,用subprocess调用命令就行,代码更简洁:
import subprocess def extract_pdf_from_p7m(p7m_path, output_pdf_path): subprocess.run([ 'openssl', 'pkcs7', '-in', p7m_path, '-inform', 'DER', # 大部分p7m是DER格式,若为PEM则改为PEM '-out', output_pdf_path, '-outform', 'DER', '-verify', '-noverify' # 跳过签名验证,直接提取内容 ], check=True)
两种方法都能直接导出原始PDF,之后你就可以用PyPDF2或其他PDF库处理了。
内容的提问来源于stack exchange,提问作者Vastem
相关产品推荐
相关产品推荐

