Browse our Products
If so you can download any of the below versions for testing. The product will function as normal except for an evaluation limitation. At the time of purchase we provide a license file via email that will allow the product to work in its full capacity. If you would also like an evaluation license to test without any restrictions for 30 days, please follow the directions provided here.
If you experience errors, when you try to download a file, make sure your network policies (enforced by your company or ISP) allow downloading ZIP and/or MSI files.
Product Page | Docs | Demos | API Reference | Blog | Free Support | Temporary License
GroupDocs.Signature for Python via .NET is an electronic signature API that adds text, image, digital (certificate), barcode, QR code, stamp, form-field and metadata signatures to documents, and finds, verifies, updates and removes the signatures a document already carries. One API covers 40+ formats: PDF, Word, Excel, PowerPoint, OpenDocument and image files. No Microsoft Office or Adobe Acrobat installation is needed.
pip install groupdocs-signature-net
from groupdocs.signature import Signature
from groupdocs.signature.options import TextSignOptions
with Signature("document.pdf") as signature:
options = TextSignOptions("John Smith")
signature.sign("signed.pdf", options)
The package is a self-contained Python wheel (about 140 MB) that bundles the .NET 10 runtime and the GroupDocs.Signature engine, so pip install is all it takes; no .NET installation is needed. On Linux the system needs ICU and fontconfig, plus libgdiplus and the Microsoft core fonts for some features (see System Requirements below). The wheel works with Python 3.5 - 3.14 on Windows, Linux and macOS (Intel and Apple Silicon).
custom_sign_hash.Supports 40+ file formats. Which signature types each format takes is listed in supported file formats.
from groupdocs.signature import Signature
from groupdocs.signature.options import TextSignOptions
with Signature("contract.pdf") as signature:
options = TextSignOptions("John Smith")
options.left = 100
options.top = 100
result = signature.sign("contract_signed.pdf", options)
print("Signatures added:", len(result.succeeded))
from groupdocs.signature import Signature
from groupdocs.signature.options import ImageSignOptions
with Signature("contract.docx") as signature:
options = ImageSignOptions("signature.png")
options.left = 50
options.top = 50
options.width = 120
options.height = 50
signature.sign("contract_signed.docx", options)
from groupdocs.signature import Signature
from groupdocs.signature.domain import BarcodeTypes, QrCodeTypes
from groupdocs.signature.options import BarcodeSignOptions, QrCodeSignOptions
with Signature("invoice.pdf") as signature:
qr_code = QrCodeSignOptions("Invoice 12345 approved by John Smith")
qr_code.encode_type = QrCodeTypes.QR
qr_code.left = 50
qr_code.top = 50
barcode = BarcodeSignOptions("INV-12345")
barcode.encode_type = BarcodeTypes.CODE128
barcode.left = 50
barcode.top = 250
result = signature.sign("invoice_signed.pdf", [qr_code, barcode])
print("Signatures added:", len(result.succeeded))
from groupdocs.signature import Signature
from groupdocs.signature.options import DigitalSignOptions
with Signature("contract.pdf") as signature:
options = DigitalSignOptions("certificate.pfx")
options.password = "1234567890"
options.reason = "Approved"
options.contact = "John Smith"
options.location = "Head office"
signature.sign("contract_signed.pdf", options)
Since engine 26.9, an expired or not-yet-valid certificate is rejected; set options.allow_expired = True (or allow_not_yet_valid) only when you mean to sign with one.
from groupdocs.signature import Signature
from groupdocs.signature.options import BarcodeSearchOptions, QrCodeSearchOptions, TextSearchOptions
with Signature("signed.pdf") as signature:
result = signature.search([TextSearchOptions(), QrCodeSearchOptions(), BarcodeSearchOptions()])
for found in result.signatures:
print(found.signature_type.name, "on page", found.page_number)
Pass a list of search options to get a SearchResult with .signatures; a single options object returns a plain list.
from groupdocs.signature import Signature
from groupdocs.signature.options import TextVerifyOptions
with Signature("signed.pdf") as signature:
result = signature.verify(TextVerifyOptions("John Smith"))
print("Signed by John Smith:", result.is_valid)
from groupdocs.signature import Signature
from groupdocs.signature.options import PreviewOptions
def create_page_stream(page_data):
return open("page-%d.png" % page_data.page_number, "wb")
def release_page_stream(page_data, page_stream):
page_stream.close()
with Signature("document.pdf") as signature:
signature.generate_preview(PreviewOptions(create_page_stream, release_page_stream))
Wherever the engine takes a callback, pass a Python function or object: signature previews (PreviewSignatureOptions), loggers (SignatureSettings(logger)), data_encryption and custom_sign_hash work the same way, and AGENTS.md in the package lists the shapes. Preview page numbers are 0-based.
from groupdocs.signature import Signature
with Signature("contract.docx") as signature:
info = signature.get_document_info()
print("Format:", info.file_type.file_format)
print("Pages:", info.page_count)
print("Size:", info.size, "bytes")
import io
from groupdocs.signature import Signature
from groupdocs.signature.options import TextSignOptions
with open("contract.pdf", "rb") as source:
with Signature(source) as signature:
output = io.BytesIO()
signature.sign(output, TextSignOptions("John Smith"))
print("Signed document:", len(output.getvalue()), "bytes")
The 26.9 engine rejects expired or not-yet-valid signing certificates (DigitalSignOptions.allow_expired / allow_not_yet_valid opt back in), does not load external resources (LoadOptions.skip_external_resources, whitelisted_resources), signs PDFs with SHA-256 and verifies PDF signatures cryptographically.
This package is designed for seamless integration with AI agents, LLMs, and automated code generation tools.
AGENTS.md in the package - AI coding assistants (Claude Code, Cursor, GitHub Copilot) auto-discover the API surface, usage patterns, and troubleshooting tips from the installed package{ "mcpServers": { "groupdocs-docs": { "url": "https://docs.groupdocs.com/mcp" } } }
https://docs.groupdocs.com/signature/python-net/llms-full.txt.md to any docs URLThe API works without a license in evaluation mode, with these limitations:
GroupDocsSignatureException (“The number of pages cannot exceed 2 in a trial version”).To remove these limitations, apply a license or request a temporary license:
from groupdocs.signature import License
License().set_license("path/to/license.lic")
Or set the environment variable (auto-applied at import):
export GROUPDOCS_LIC_PATH="path/to/license.lic"
A damaged or wrong license file is accepted without an error and leaves the library in evaluation mode, so check a signed page for the evaluation line.
| Issue | Platform | Fix |
|---|---|---|
The type initializer for 'Gdip' threw an exception / DllNotFoundException: libgdiplus while signing | Linux/macOS | Install libgdiplus: apt-get install libgdiplus / brew install mono-libgdiplus. Only stamp and text-as-image signatures, signatures on PowerPoint and image files, borders and transparency, and text/stamp previews need it; import and the other signatures work without it |
Font Times New Roman was not found / Font Arial was not found | Linux | Install the Microsoft core fonts: apt-get install ttf-mscorefonts-installer (Debian: enable contrib), then fc-cache -f |
The process aborts on first use with Couldn't find a valid ICU package | Linux | Install ICU: apt-get install libicu-dev; do NOT set DOTNET_SYSTEM_GLOBALIZATION_INVARIANT |
is not a supported wheel on this platform, or No matching distribution found | Linux/macOS | The OS is older than the wheel needs (glibc 2.27, macOS 12), or pip is older than 20.3: python -m pip install --upgrade pip. On an Intel Mac, a Python built against an old SDK reports macOS 10.16 - use pip 24.1+ or SYSTEM_VERSION_COMPAT=0 pip install groupdocs-signature-net |
The signing certificate expired on ... | All | Since 26.9 expired certificates are rejected; renew it, or set allow_expired = True on the DigitalSignOptions |
The number of pages cannot exceed 2 in a trial version, or search returns an evaluation notice instead of the signature’s text | All | No license is applied: set GROUPDOCS_LIC_PATH or call License().set_license(path) |
apt-get install libicu-dev libfontconfig1 libgdiplus ttf-mscorefonts-installer (on Debian, enable the contrib component first). libgdiplus is needed for stamp and text-as-image signatures, for barcode, QR code and image signatures with a border or transparency, for any signature on PowerPoint and image files, and for text and stamp signature previews; the core fonts for PDF text and digital signatures, whose default fonts are Times New Roman and Arial.brew install mono-libgdiplus for the same features.26.1 was built by an earlier toolchain; the modules are the same, but check these:
z_order -> zorder, x_ad_es_type -> xad_es_type, h_corner_radius / v_corner_radius -> hcorner_radius / vcorner_radius, FileType.G_ZIP -> GZIP, and nine BarcodeTypes constants lost an underscore (GS1_CODE_128 -> GS1_CODE128).AttributeError with a suggestion; 26.1 accepted it silently, so a renamed property was simply ignored.GroupDocsSignatureException (or IncorrectPasswordException / PasswordRequiredException) instead of RuntimeError("Proxy error(...)"), and they do not derive from RuntimeError.page_data.page_number is 0 for the first page).GROUPDOCS_LIC_PATH is applied at import.The release notes have the full list.
Also available for other platforms: .NET | Java | Node.js
Product Page | Docs | Demos | API Reference | Examples | Blog | Search | Free Support | Temporary License
GroupDocs.Signature GroupDocs.Total Python PyPI Electronic-Signature Digital-Signature PDF-Signature QR-Code Barcode Signature-Verification
Self-contained Python wheel of GroupDocs.Signature 26.10 for Windows (x64). Compatible with Python 3.5-3.14. No external dependencies required. Electronic signatures for documents.
Added: 6/10/2026
Downloads:
File Size: 133.05MB
Self-contained Python wheel of GroupDocs.Signature 26.10 for Linux (x64). Compatible with Python 3.5-3.14. Requires ICU (libicu), libgdiplus, libfontconfig1, and fonts (e.g. ttf-mscorefonts-installer). Electronic signatures for documents.
Added: 6/10/2026
Downloads:
File Size: 132.43MB
Self-contained Python wheel of GroupDocs.Signature 26.10 for macOS amd64 (Intel). Compatible with Python 3.5-3.14. Requires mono-libgdiplus (brew install mono-libgdiplus). Electronic signatures for documents.
Added: 6/10/2026
Downloads:
File Size: 134.41MB
Self-contained Python wheel of GroupDocs.Signature 26.10 for macOS arm64 (Apple Silicon). Compatible with Python 3.5-3.14. Requires mono-libgdiplus (brew install mono-libgdiplus). Electronic signatures for documents.
Added: 6/10/2026
Downloads:
File Size: 132.3MB
This wheel contains GroupDocs.Signature for Python via .NET version 26.1, built for Linux and targeting the x64 architecture.
Added: 12/1/2026
Downloads:
File Size: 140.82MB
This wheel contains GroupDocs.Signature for Python via .NET version 26.1, built for macOS and targeting the x64 architecture.
Added: 12/1/2026
Downloads:
File Size: 137.79MB
This wheel contains GroupDocs.Signature for Python via .NET version 26.1, built for macOS and targeting the ARM64 architecture.
Added: 12/1/2026
Downloads:
File Size: 128.45MB
This wheel contains GroupDocs.Signature for Python via .NET version 26.1, built for Windows and targeting the AMD64 architecture.
Added: 12/1/2026
Downloads:
File Size: 128.17MB
This wheel contains GroupDocs.Signature version 26.1, compatible with Python 3 and optimized for Windows 32-bit systems.
Added: 12/1/2026
Downloads:
File Size: 122.03MB
This wheel contains GroupDocs.Signature for Python via .NET version 25.4, built for Windows and targeting the AMD64 architecture.
Added: 30/4/2025
Downloads:
File Size: 125.31MB
This wheel contains GroupDocs.Signature version 25.4.0, compatible with Python 3 and optimized for Windows 32-bit systems.
Added: 30/4/2025
Downloads:
File Size: 119.3MB
This wheel contains GroupDocs.Signature for Python via .NET version 24.11, built for Windows and targeting the AMD64 architecture.
Added: 20/1/2025
Downloads:
File Size: 162.35MB
This wheel contains GroupDocs.Signature version 24.11.0, compatible with Python 3 and optimized for Windows 32-bit systems.
Added: 20/1/2025
Downloads:
File Size: 156.68MB