如何使用 python 创建包含签名字段的 PDF 文件?
How do I create a PDF file containing a Signature Field, using python?
为了能够使用基于令牌的 DSC 签署 PDF 文档,我的 PDF 中需要一个 so-called 签名字段。
这是一个矩形字段,您可以使用数字签名等方式填充该字段。 Adobe Reader 或 Adobe Acrobat.
我想在 Python 中创建这个可签名的 PDF。
我从纯文本或 .docx 格式的 rich-text 文档(图像和文本)开始。
如何在 Python 中生成包含此字段的 PDF 文件?
很遗憾,我找不到任何(免费)解决方案。只有 Python 个签署 PDF 文档的程序。
但是有一个名为 PDFTron that has a free trial. Here's a link 的 Python PDF SDK 用于显示如何 "add a certification signature field to a PDF document and sign it" 的特定文章。
# Open an existing PDF
doc = PDFDoc(docpath)
page1 = doc.GetPage(1)
# Create a text field that we can lock using the field permissions feature.
annot1 = TextWidget.Create(doc.GetSDFDoc(), Rect(50, 550, 350, 600), "asdf_test_field")
page1.AnnotPushBack(annot1)
# Create a new signature form field in the PDFDoc. The name argument is optional;
# leaving it empty causes it to be auto-generated. However, you may need the name for later.
# Acrobat doesn't show digsigfield in side panel if it's without a widget. Using a
# Rect with 0 width and 0 height, or setting the NoPrint/Invisible flags makes it invisible.
certification_sig_field = doc.CreateDigitalSignatureField(cert_field_name)
widgetAnnot = SignatureWidget.Create(doc, Rect(0, 100, 200, 150), certification_sig_field)
page1.AnnotPushBack(widgetAnnot)
...
# Save the PDFDoc. Once the method below is called, PDFNet will also sign the document using the information provided.
doc.Save(outpath, 0)
我使用 python 的 signpdf 库来签署 pdf。
阅读此文档以更好地理解https://github.com/yourcelf/signpdf
pip install signpdf
演示:- 使用签名“sig.png”在“contract.pdf”的第一页签名:->
signpdf contract.pdf sig.png --coords 1x100x100x150x40
理解坐标:- Github link
您可以使用 https://github.com/mstamy2/PyPDF2 通过 python 代码生成 PDF。
然后使用开源 Java-Digital-Signature
:Java 命令行工具使用 PKCS#11 令牌进行数字签名:https://github.com/AlessioScarfone/Java-Digital-Signature
并调用您的 python 代码:
import subprocess
subprocess.call(['java', '-jar', 'signer.jar', 'pades', 'test.pdf'])
查看 pyHanko。您可以使用 Python.
添加、编辑和数字签名 PDF
https://github.com/MatthiasValvekens/pyHanko
完全免费。如果您有任何问题,Matthias 会非常乐于助人且反应迅速。
为了能够使用基于令牌的 DSC 签署 PDF 文档,我的 PDF 中需要一个 so-called 签名字段。
这是一个矩形字段,您可以使用数字签名等方式填充该字段。 Adobe Reader 或 Adobe Acrobat.
我想在 Python 中创建这个可签名的 PDF。
我从纯文本或 .docx 格式的 rich-text 文档(图像和文本)开始。
如何在 Python 中生成包含此字段的 PDF 文件?
很遗憾,我找不到任何(免费)解决方案。只有 Python 个签署 PDF 文档的程序。
但是有一个名为 PDFTron that has a free trial. Here's a link 的 Python PDF SDK 用于显示如何 "add a certification signature field to a PDF document and sign it" 的特定文章。
# Open an existing PDF
doc = PDFDoc(docpath)
page1 = doc.GetPage(1)
# Create a text field that we can lock using the field permissions feature.
annot1 = TextWidget.Create(doc.GetSDFDoc(), Rect(50, 550, 350, 600), "asdf_test_field")
page1.AnnotPushBack(annot1)
# Create a new signature form field in the PDFDoc. The name argument is optional;
# leaving it empty causes it to be auto-generated. However, you may need the name for later.
# Acrobat doesn't show digsigfield in side panel if it's without a widget. Using a
# Rect with 0 width and 0 height, or setting the NoPrint/Invisible flags makes it invisible.
certification_sig_field = doc.CreateDigitalSignatureField(cert_field_name)
widgetAnnot = SignatureWidget.Create(doc, Rect(0, 100, 200, 150), certification_sig_field)
page1.AnnotPushBack(widgetAnnot)
...
# Save the PDFDoc. Once the method below is called, PDFNet will also sign the document using the information provided.
doc.Save(outpath, 0)
我使用 python 的 signpdf 库来签署 pdf。
阅读此文档以更好地理解https://github.com/yourcelf/signpdf
pip install signpdf
演示:- 使用签名“sig.png”在“contract.pdf”的第一页签名:->
signpdf contract.pdf sig.png --coords 1x100x100x150x40
理解坐标:- Github link
您可以使用 https://github.com/mstamy2/PyPDF2 通过 python 代码生成 PDF。
然后使用开源 Java-Digital-Signature
:Java 命令行工具使用 PKCS#11 令牌进行数字签名:https://github.com/AlessioScarfone/Java-Digital-Signature
并调用您的 python 代码:
import subprocess
subprocess.call(['java', '-jar', 'signer.jar', 'pades', 'test.pdf'])
查看 pyHanko。您可以使用 Python.
添加、编辑和数字签名 PDFhttps://github.com/MatthiasValvekens/pyHanko
完全免费。如果您有任何问题,Matthias 会非常乐于助人且反应迅速。