Digital signatures are vital for maintaining the authenticity and integrity of PDF documents. They provide a reliable way to verify the signer's identity and ensure that the document's content has not been tampered with since the signature was applied. By using digital signatures, you can enhance the security and trustworthiness of your documents. In this article, we will explore how to add and remove digital signatures in PDF files in Python using Spire.PDF for Python.
- Add a Digital Signature to PDF in Python
- Add an Invisible Digital Signature to PDF in Python
- Remove Digital Signature from PDF in Python
Install Spire.PDF for Python
This scenario requires Spire.PDF for Python and plum-dispatch v1.7.4. They can be easily installed in your Windows through the following pip command.
pip install Spire.PDF
If you are unsure how to install, please refer to this tutorial: How to Install Spire.PDF for Python on Windows
Add a Digital Signature to PDF in Python
You can use the PdfOrdinarySignatureMaker.MakeSignature(sigFieldName: str, page: PdfPageBase, x: float, y: float, width: float, height: float, signatureAppearance: IPdfSignatureAppearance) method to add a visible digital signature with a custom appearance to a specific page of a PDF document. The detailed steps are as follows.
- Create a PdfDocument instance.
- Load a PDF document using PdfDocument.LoadFromFile() method.
- Create a PdfOrdinarySignatureMaker instance and pass the PdfDocument object, certificate (.pfx) file path and certificate password to the class instructor as parameters.
- Set signature details, such as the signer’s name, contact information, location, and signature reason, using the properties of the PdfOrdinarySignatureMaker class.
- Create a PdfSignatureAppearance instance for the signature, and then customize the labels for the signature and set the signature image.
- Get a specific page in the PDF document using PdfDocument.Pages[] property.
- Call the PdfOrdinarySignatureMaker.MakeSignature(sigFieldName: str, page: PdfPageBase, x: float, y: float, width: float, height: float, signatureAppearance: IPdfSignatureAppearance) method to add the digital signature to a specific location of the page.
- Save the result document using the PdfDocument.SaveToFile() method.
- Python
from spire.pdf.common import * from spire.pdf import * # Create a PdfDocument instance doc = PdfDocument() # Load a PDF file doc.LoadFromFile("Sample.pdf") # Create a signature maker signatureMaker = PdfOrdinarySignatureMaker(doc, "gary.pfx", "e-iceblue") # Configure the signature properties like the signer's name, contact information, location and signature reason signature = signatureMaker.Signature signature.Name = "Gary" signature.ContactInfo = "+86 12345678" signature.Location = "China" signature.Reason = "I am the author." # Create a custom signature appearance appearance = PdfSignatureAppearance(signature) # Set label for the signer's name appearance.NameLabel = "Signer: " # Set label for the contact information appearance.ContactInfoLabel = "Phone: " # Set label for the location appearance.LocationLabel = "Location: " # Set label for the signature reason appearance.ReasonLabel = "Reason: " # Set signature image appearance.SignatureImage = PdfImage.FromFile("SigImg.png") # Set the graphic render/display mode for the signature appearance.GraphicMode = GraphicMode.SignImageAndSignDetail # Set the layout for the signature image appearance.SignImageLayout = SignImageLayout.none # Get the first page page = doc.Pages[0] # Add the signature to a specified location of the page signatureMaker.MakeSignature("Signature by Gary", page, 90.0, 600.0, 260.0, 100.0, appearance) # Save the signed document doc.SaveToFile("Signed.pdf") doc.Close()
Add an Invisible Digital Signature to PDF in Python
An invisible signature in a PDF is a type of digital signature that provides all the security and authentication benefits of a standard digital signature but does not appear visibly on the document itself. Using the PdfOrdinarySignatureMaker.MakeSignature(sigFieldName: str) method of Spire.PDF for Python, you can add an invisible digital signature to a PDF document. The detailed steps are as follows.
- Create a PdfDocument instance.
- Load a PDF document using PdfDocument.LoadFromFile() method.
- Create a PdfOrdinarySignatureMaker instance and pass the PdfDocument object, certificate (.pfx) file path and password to the class instructor as parameters.
- Add an invisible digital signature to a PDF document using the PdfOrdinarySignatureMaker.MakeSignature(sigFieldName: str) method
- Save the result document using the PdfDocument.SaveToFile() method.
- Python
from spire.pdf.common import * from spire.pdf import * # Create a PdfDocument instance doc = PdfDocument() # Load a PDF document doc.LoadFromFile("test2.pdf") # Create a signature maker signatureMaker = PdfOrdinarySignatureMaker(doc, "gary.pfx", "e-iceblue") # Add an invisible signature to the document signatureMaker.MakeSignature("Signature by Gary") # Save the signed document doc.SaveToFile("InvisibleSignature.pdf") doc.Close()
Remove Digital Signature from PDF in Python
To remove digital signatures from a PDF document, you need to iterate through all form fields in the document, find the form fields that are of PdfSignatureFieldWidget type and then remove them from the document. The detailed steps are as follows.
- Create a PdfDocument instance.
- Load a PDF document using PdfDocument.LoadFromFile() method.
- Get the form field collection of the document using PdfDocument.Form property.
- Iterate through the form fields in the collection from the last to the first.
- Check if the field is a PdfSignatureFieldWidget object.
- If the result is True, remove the field from the document using PdfFormFieldWidgetCollection.FieldsWidget.RemoveAt(index) method.
- Save the result document using the PdfDocument.SaveToFile() method.
- Python
from spire.pdf.common import * from spire.pdf import * # Create a PdfDocument instance doc = PdfDocument() # Load a PDF document doc.LoadFromFile("Signed.pdf") # Get form field collection from the document pdfForm = doc.Form formWidget = PdfFormWidget(pdfForm) # Check if there are any form fields in the collection if formWidget.FieldsWidget.Count > 0: # Loop through all form fields from the last to the first for i in range(formWidget.FieldsWidget.Count - 1, -1, -1): field = formWidget.FieldsWidget[i] # Check if the field is a PdfSignatureFieldWidget if isinstance(field, PdfSignatureFieldWidget): # Remove the field formWidget.FieldsWidget.RemoveAt(i) # Save the document doc.SaveToFile("RemoveSignature.pdf") doc.Close()
Apply for a Temporary License
If you'd like to remove the evaluation message from the generated documents, or to get rid of the function limitations, please request a 30-day trial license for yourself.