python的0.18.1版本的pyHanko库的全部功能及示例
时间: 2024-03-12 12:46:08 浏览: 323
pyHanko 是一个 Python 库,用于处理 PDF 文档的数字签名和加密。它支持 PDF 1.7 及更高版本,并可以与 PyPDF2 和 ReportLab 库一起使用。
pyHanko 的主要功能包括:
1. 数字签名
pyHanko 可以使用 PKCS#12 证书对 PDF 文档进行数字签名,支持多种签名方法和签名位置。
2. 加密
pyHanko 可以对 PDF 文档进行加密,支持多种加密算法和密码长度,并可以设置权限和密码保护选项。
3. PDF 版本转换
pyHanko 可以将 PDF 文档从低版本转换为高版本,也可以将高版本转换为低版本。
下面是 pyHanko 的一些示例:
1. 数字签名示例
```python
from pyhanko.sign import signers
from pyhanko.sign.general import SignatureMetadata
from pyhanko.pdf_utils import GenericPdfParser
from pyhanko.pdf_utils.writer import PdfFileWriter
# 读取 PDF 文档
with open('example.pdf', 'rb') as f:
parser = GenericPdfParser(f)
pdf = parser.get_parsed()
# 创建签名器
signer = signers.PdfSigner.from_pkcs12(
certfile='mycert.p12',
passphrase='mypassword'
)
# 创建签名元数据
metadata = SignatureMetadata(
signer_cert=signer.signing_cert,
signer_name=signer.signing_cert.subject.rfc4514_string(),
signature_reason='To verify the authenticity of the document',
)
# 对 PDF 文档进行数字签名
pdf_writer = PdfFileWriter()
signature = signer.sign_pdf(
input_pdf=pdf,
output_pdf=pdf_writer,
md=metadata,
appearance=None,
)
```
2. 加密示例
```python
from pyhanko.pdf_utils import GenericPdfParser
from pyhanko.pdf_utils.writer import PdfFileWriter
from pyhanko.pdf_utils import encrypt
# 读取 PDF 文档
with open('example.pdf', 'rb') as f:
parser = GenericPdfParser(f)
pdf = parser.get_parsed()
# 设置加密选项
encrypt_opts = encrypt.EncryptOptions(
standard='AES',
keylen=256,
perms=encrypt.Permissions(
owner=True,
print_highres=True,
print_lowres=True,
),
user_password='mypassword',
owner_password='myownerpassword',
)
# 对 PDF 文档进行加密
pdf_writer = PdfFileWriter()
encrypt.encrypt_pdf(
input_pdf=pdf,
output_pdf=pdf_writer,
options=encrypt_opts,
)
# 将加密后的 PDF 文档写入文件
with open('encrypted.pdf', 'wb') as f:
pdf_writer.write(f)
```
3. PDF 版本转换示例
```python
from pyhanko.pdf_utils import PdfVersionEnum
from pyhanko.pdf_utils.writer import PdfFileWriter
from pyhanko.pdf_utils import misc
# 读取 PDF 文档
with open('example.pdf', 'rb') as f:
parser = GenericPdfParser(f)
pdf = parser.get_parsed()
# 将 PDF 文档从低版本转换为高版本
pdf_writer = PdfFileWriter()
misc.upgrade_pdf(pdf, PdfVersionEnum.PDF_1_7, pdf_writer)
# 将转换后的 PDF 文档写入文件
with open('upgraded.pdf', 'wb') as f:
pdf_writer.write(f)
```
阅读全文