Product Page | Documentation | Free Support | Temporary License
Add electronic signatures to documents - text, image, barcode, QR code, digital and stamp signatures.
Key Features
- Text, image, barcode, QR code, stamp, metadata, form-field and digital (certificate) signatures
- Search, verify, update and delete existing signatures
- Document page previews and signature previews, written through your own Python callbacks
- Custom encryption for QR code and metadata signatures, custom loggers, and external signing (HSM, Azure Key Vault) through a Python
custom_sign_hash - PDF, Word, Excel, PowerPoint, OpenDocument and image formats
Installation
pip install groupdocs-signature-net
Quick Start
from groupdocs.signature import Signature
from groupdocs.signature.options import TextSignOptions
with Signature("document.pdf") as sig:
options = TextSignOptions("Approved")
sig.sign("signed.pdf", options)
Previews and other callbacks
Wherever the engine takes a callback, pass a Python function or object:
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 sig:
sig.generate_preview(PreviewOptions(create_page_stream, release_page_stream))
The same works for signature previews (PreviewSignatureOptions), loggers (SignatureSettings(logger)), data_encryption and custom_sign_hash; AGENTS.md in the package lists the shapes.
Security defaults
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.
System Requirements
- Python 3.5 - 3.14, pip 20.3 or newer
- Windows x64, Linux x64, macOS x64/ARM64 — 64-bit Python only; there is no 32-bit Windows wheel
- Linux: glibc 2.27 or newer (e.g. Ubuntu 18.04+, Debian 10+, RHEL 8+), plus ICU, fontconfig, libgdiplus and the Microsoft core fonts:
apt-get install libicu-dev libfontconfig1 libgdiplus ttf-mscorefonts-installer(on Debian, enable thecontribcomponent 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. - macOS 12 or newer, Intel or Apple Silicon:
brew install mono-libgdiplusfor the same features.
Troubleshooting
| Error | Platform | Fix |
|---|---|---|
The type initializer for 'Gdip' threw an exception / DllNotFoundException: libgdiplus |
Linux/macOS | Install libgdiplus: apt-get install libgdiplus / brew install mono-libgdiplus |
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 |
Couldn't find a valid ICU package, or the process aborts on first use |
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). A damaged or wrong license file is accepted without an error, so check a signed page for the evaluation line |
Upgrading from 26.1
26.1 was built by an earlier toolchain; the modules are the same, but check these:
- A few names changed:
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 nineBarcodeTypesconstants lost an underscore (GS1_CODE_128→GS1_CODE128). - Assigning an attribute a class does not have now raises
AttributeErrorwith a suggestion; 26.1 accepted it silently, so a renamed property was simply ignored. - Engine errors raise
GroupDocsSignatureException(orIncorrectPasswordException/PasswordRequiredException) instead ofRuntimeError("Proxy error(...)"), and they do not derive fromRuntimeError. - Preview page numbers are 0-based (
page_data.page_numberis 0 for the first page). GROUPDOCS_LIC_PATHis applied at import.
The release notes have the full list.
AI Agent & LLM Friendly
This package is designed for seamless integration with AI agents, LLMs, and automated code generation tools.
AGENTS.mdin the package — AI coding assistants (Claude Code, Cursor, GitHub Copilot) auto-discover the API surface, usage patterns, and troubleshooting tips from the installed package- MCP server — connect your AI tool to GroupDocs documentation for on-demand API lookups:
{ "mcpServers": { "groupdocs-docs": { "url": "https://docs.groupdocs.com/mcp" } } }
- Machine-readable docs — full documentation available as plain text for RAG and LLM context:
- Single file:
https://docs.groupdocs.com/signature/python-net/llms-full.txt - Per page: append
.mdto any docs URL
- Single file:
Metadata
Release files for groupdocs-signature-net 26.10.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Actions Reset | |||
|---|---|---|---|---|
| groupdocs_signature_net-26.10.0-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details for groupdocs_signature_net-26.10.0-py3-none-win_amd64.whl |
| groupdocs_signature_net-26.10.0-py3-none-manylinux_2_27_x86_64.whl | Python 3 | none | Linux glibc 2.27+ x86-64 | Details for groupdocs_signature_net-26.10.0-py3-none-manylinux_2_27_x86_64.whl |
| groupdocs_signature_net-26.10.0-py3-none-macosx_12_0_x86_64.whl | Python 3 | none | macOS 12.0+ x86-64 | Details for groupdocs_signature_net-26.10.0-py3-none-macosx_12_0_x86_64.whl |
| groupdocs_signature_net-26.10.0-py3-none-macosx_12_0_arm64.whl | Python 3 | none | macOS 12.0+ ARM64 | Details for groupdocs_signature_net-26.10.0-py3-none-macosx_12_0_arm64.whl |
Total release size: 558.0 MB
Release files / groupdocs_signature_net-26.10.0-py3-none-win_amd64.whl
| Download URL | groupdocs_signature_net-26.10.0-py3-none-win_amd64.whl |
|---|---|
| Size | 139.5 MB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
c1ceae9d0b6c660f3dfcff8fa8ec9a9ba7a8627d8c6d3db2fc55a9235575580a
|
|
BLAKE2b-256 checksum How to use checksums |
08b557b6516954a5eea7c1df765c4001a426d7885df5bfbef0d420256bb0a16f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.16
|
Release files / groupdocs_signature_net-26.10.0-py3-none-manylinux_2_27_x86_64.whl
| Download URL | groupdocs_signature_net-26.10.0-py3-none-manylinux_2_27_x86_64.whl |
|---|---|
| Size | 138.9 MB |
| Tags | Linux glibc 2.27+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
f4452e913f529321c763ffc723326b2af53e7a46f6eef6032b815bc0f0752dba
|
|
BLAKE2b-256 checksum How to use checksums |
f87b79a7aec46743db4c6cbab48a39390568ca2ab2467dbc1c83bb2c6e0f0c65
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.16
|
Release files / groupdocs_signature_net-26.10.0-py3-none-macosx_12_0_x86_64.whl
| Download URL | groupdocs_signature_net-26.10.0-py3-none-macosx_12_0_x86_64.whl |
|---|---|
| Size | 140.9 MB |
| Tags | Python 3 macOS 12.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
3f0b01d3c7e27ad108c96ff224d14bb9daefa0e60b142dc392a0bbe9a36fb705
|
|
BLAKE2b-256 checksum How to use checksums |
d4c41ca86150e615312297d5f8dec285eb0037d4d9b575f1ff16881094b4ed3c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.16
|
Release files / groupdocs_signature_net-26.10.0-py3-none-macosx_12_0_arm64.whl
| Download URL | groupdocs_signature_net-26.10.0-py3-none-macosx_12_0_arm64.whl |
|---|---|
| Size | 138.7 MB |
| Tags | Python 3 macOS 12.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
091afb172e42546fb667c69a8ec1283121d2808198eeed8bcb50e11058dd75e7
|
|
BLAKE2b-256 checksum How to use checksums |
d8eb4f31941b5f314eee19b94fe3b124b89df731bcaae1befd1139abf5838ac7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.16
|
Security for groupdocs-signature-net 26.10.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.