GroupDocs.Signature for Python via .NET 26.10 Release Notes
This release upgrades the GroupDocs.Signature engine from 25.12 to 26.9. The embedded .NET runtime moves from .NET Core 3.1 to .NET 10.0.12. New features include Python-style callbacks for preview streams, logger, data encryption and custom sign hash, and support for Python 3.14. 18 members were renamed to their .NET spelling (z_order → zorder), and assigning an attribute a class does not have now raises AttributeError. Platform wheels now target manylinux_2_27_x86_64 and macosx_12_0_* and the 32-bit Windows wheel is removed.
Breaking change: 18 members were renamed (e.g., options.z_order → options.zorder), so existing code must use the new names. Assigning an attribute that a class does not have now raises AttributeError instead of silently ignoring it. Engine errors that previously raised RuntimeError now raise GroupDocsSignatureException, IncorrectPasswordException or PasswordRequiredException. The wheel platform tags changed to manylinux_2_27_x86_64, macosx_12_0_x86_64 and macosx_12_0_arm64, and the 32-bit Windows wheel was dropped, requiring pip 20.3+ for installation. See API Changes for the full list.
Full List of Changes in This Release
| Key | Category | Summary |
|---|---|---|
| SIGNATUREPYTHON‑21 | Feature | Accept Python functions as page and signature preview callbacks |
| SIGNATUREPYTHON‑22 | Feature | Accept Python objects as ILogger, IDataEncryption and ICustomSignHash implementations |
| SIGNATUREPYTHON‑23 | Feature | Add support for Python 3.14 |
| SIGNATUREPYTHON‑24 | Enhancement | Update GroupDocs.Signature engine from 25.12 to 26.9 |
| SIGNATUREPYTHON‑25 | Enhancement | Update the embedded .NET runtime from .NET Core 3.1 to .NET 10.0.12 |
| SIGNATUREPYTHON‑26 | Enhancement | Raise GroupDocsSignatureException, IncorrectPasswordException and PasswordRequiredException instead of RuntimeError |
| SIGNATUREPYTHON‑27 | Enhancement | Raise AttributeError when code assigns an attribute a class does not have |
| SIGNATUREPYTHON‑28 | Enhancement | Rename members whose Python names split .NET words (z_order → zorder, x_ad_es_type → xad_es_type) |
| SIGNATUREPYTHON‑29 | Enhancement | Choose overloads by the contents of a list, and pass datetime and Decimal values to .NET unchanged |
| SIGNATUREPYTHON‑30 | Enhancement | Update wheel platform tags to manylinux_2_27 and macosx_12_0, and drop the 32-bit Windows wheel |
| SIGNATUREPYTHON‑31 | Fix | The Linux wheel cannot be imported on current distributions |
| SIGNATUREPYTHON‑32 | Fix | GROUPDOCS_LIC_PATH is ignored |
Major Features
Preview generation with Python callbacks
PreviewOptions can now be constructed with plain Python functions. The create callback receives a page_data object and must return a writable stream (file object or io.BytesIO). The release callback is called after the image is written and receives the same page_data and stream. In 26.1 this raised the error "type has no available constructor" because the class could not be instantiated from Python.
from groupdocs.signature import Signature
from groupdocs.signature.options import PreviewOptions
def create_page_stream(page_data):
return open(f"page-{page_data.page_number}.png", "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))
Python objects as logger, encryption, and custom hash callbacks
Plain Python objects can now implement the ILogger, IDataEncryption, and ICustomSignHash interfaces. A logger object with trace, warning, and error methods can be passed to SignatureSettings. An encryption object with encode and decode methods can be assigned to options.data_encryption on QR-code or metadata signatures. A custom hash signer can be a function or an object with a custom_sign_hash method and is used by DigitalSignOptions.custom_sign_hash. Previously these callbacks were unavailable from Python.
import base64
from groupdocs.signature import Signature, SignatureSettings
from groupdocs.signature.options import QrCodeSignOptions
class SimpleLogger:
def trace(self, message):
print("TRACE:", message)
def warning(self, message):
print("WARN:", message)
def error(self, message, exception=None):
print("ERROR:", message, exception)
class Base64Encryption:
def encode(self, source):
return base64.b64encode(source.encode()).decode()
def decode(self, source):
return base64.b64decode(source).decode()
options = QrCodeSignOptions("Private text")
options.data_encryption = Base64Encryption()
with Signature("document.pdf", SignatureSettings(logger=SimpleLogger())) as signature:
signature.sign("signed.pdf", options)
Support for Python 3.14
The wheel now declares python_requires=">=3.5,<3.15" and a single wheel per platform covers Python 3.5 – 3.14. In 26.1 the wheel declared <3.14, so pip install failed on Python 3.14. No code changes are required; the same import and usage work on the newer interpreter.
Updated platform tags and 64-bit Windows wheel
Wheel platform tags have been updated to manylinux_2_27 for Linux and macosx_12_0 for macOS, reflecting the oldest OS versions the embedded runtime supports. The 32-bit Windows wheel has been removed; only an x64 Windows wheel is provided. Installing therefore requires pip 20.3 or newer. No code changes are needed; the package can be installed on the supported platforms as before.
API Changes
Upgraders need to adjust to renamed members, new exception types, and the updated platform tags. Attribute assignments now raise AttributeError and callbacks can be plain Python callables.
New classes and members
groupdocs.signature:ProcessCompleteEventHandler,ProcessProgressEventHandler,ProcessStartEventHandler.groupdocs.signature.domain:OoxmlCompliance.groupdocs.signature.options:CreateSignatureStream,ReleaseSignatureStream,PreviewOptions.CreateDocPageStream,PreviewOptions.ReleaseDocPageStream,PreviewOptions.PreviewFormats,PreviewSignatureOptions.PreviewFormats.ConsoleLogger:error().DigitalSignOptions:allow_expired,allow_not_yet_valid.DigitalSignature:certificate_store_location,certificate_store_name.FileLogger:error().ILogger:error().ImageSignOptions:dispose().LoadOptions:skip_external_resources,whitelisted_resources.Mailmark2D:class_.MetadataSignatureCollection:append(),get().PreviewOptions: a constructor; it had none.PreviewSignatureOptions: a constructor; it had none.SearchResult:get_enumerator(),to_list().Signature:dispose().SignatureSettings:default_culture.WordProcessingSaveOptions:ooxml_compliance.
Renamed
| Class | Old name | New name |
|---|---|---|
BarcodeTypes | DATA_LOGIC_2OF_5 | DATA_LOGIC_2OF5 |
BarcodeTypes | GS1_CODE_128 | GS1_CODE128 |
BarcodeTypes | GS1_MICRO_PDF_417 | GS1_MICRO_PDF417 |
BarcodeTypes | IATA2OF_5 | IATA2OF5 |
BarcodeTypes | INTERLEAVED_2OF_5 | INTERLEAVED_2OF5 |
BarcodeTypes | MATRIX_2OF_5 | MATRIX_2OF5 |
BarcodeTypes | STANDARD_2OF_5 | STANDARD_2OF5 |
BarcodeTypes | UPCA_GS_1_CODE_128_COUPON | UPCA_GS1_CODE_128_COUPON |
BarcodeTypes | UPCA_GS_1_DATABAR_COUPON | UPCA_GS1_DATABAR_COUPON |
DigitalSignature | x_ad_es_type | xad_es_type |
FileType | G_ZIP | GZIP |
FileType | L_ZIP | LZIP |
XAdESType | X_AD_ES | XAD_ES |
DigitalSignOptions | x_ad_es_type | xad_es_type |
JpegCompressionColorMode | Y_CB_CR | YCB_CR |
SignOptions | z_order | zorder |
PdfTextAnnotationAppearance | h_corner_radius | hcorner_radius |
PdfTextAnnotationAppearance | v_corner_radius | vcorner_radius |
Fixed
- The Linux wheel cannot be imported on current distributions (SIGNATUREPYTHON‑31). Importing
groupdocs.signatureon Linux raisedversion 'GLIBC_2.38' not found(Debian 12) orCouldn't find a valid ICU package(Debian 13) because the 26.1 extension required glibc 2.38 and its embedded .NET Core 3.1 does not recognise current ICU versions. The 26.10 release ships a manylinux_2_27 wheel with the .NET 10 runtime, which runs on glibc 2.27+ with any ICU version, so the module now imports and boots on current Linux distributions. GROUPDOCS_LIC_PATHis ignored (SIGNATUREPYTHON‑32).GROUPDOCS_LIC_PATHwas ignored, so runs withoutLicense().set_license()stayed in evaluation mode. In 26.10 the variable is read at import and the license file or URL is applied automatically, enabling full functionality without extra code.
Known Issues
- Without ICU the process aborts on the first engine call with
Couldn't find a valid ICU package, and no Python exception is raised. Install ICU (apt-get install libicu-dev, any version) and do not setDOTNET_SYSTEM_GLOBALIZATION_INVARIANT. - On Linux and macOS, stamp and text-as-image signatures, barcode, QR code and image signatures with a border or transparency, every signature on PowerPoint and image files, and text and stamp signature previews need
libgdiplus; without it they fail withThe type initializer for 'Gdip' threw an exception. Install it withapt-get install libgdiplusorbrew install mono-libgdiplus. - On Linux, PDF text and digital signatures with the default fonts fail with
Font Times New Roman was not foundorFont Arial was not foundunless the Microsoft core fonts are installed (apt-get install ttf-mscorefonts-installer, thenfc-cache -f); Liberation and other substitutes are not used. - On macOS, a stale system copy of
libSkiaSharp.dylibin/usr/local/libcan shadow the bundled one and causeDllNotFoundException: libSkiaSharp. Rename it, e.g.sudo mv /usr/local/lib/libSkiaSharp.dylib /usr/local/lib/libSkiaSharp.dylib.bak. - With pip older than 20.3, or on Linux older than glibc 2.27 or macOS older than 12, pip cannot use the 26.10 wheels: an unpinned
pip install groupdocs-signature-netfalls back to 26.1, and a pinned one finds no matching distribution. Upgrade pip withpython -m pip install --upgrade pip. - Passing a single
SearchOptionsobject tosearch()returns a plain list; to get aSearchResultwith.signaturespass a list of options (search([options])).
Requirements
- Python 3.5 – 3.14 (
python_requires = ">=3.5,<3.15") and pip 20.3 or newer - Linux x64 with glibc 2.27 or newer; macOS 12 or newer, Intel or Apple Silicon. On an Intel Mac, a Python built against a pre-11 macOS SDK reports the system as macOS 10.16 — use pip 24.1 or newer there, or
SYSTEM_VERSION_COMPAT=0 pip install groupdocs-signature-net - Windows: no additional packages
- Linux: ICU, fontconfig, libgdiplus and fonts —
apt-get install libicu-dev libfontconfig1 libgdiplus ttf-mscorefonts-installer(on Debian, enable thecontribcomponent first). libgdiplus: stamp and text-as-image signatures, barcode/QR/image signatures with a border or transparency, every signature on PowerPoint and image files, and text/stamp signature previews. The Microsoft core fonts: PDF text and digital signatures, whose default fonts are Times New Roman and Arial (Liberation substitutes are not picked up). - The .NET 10.0.12 runtime is embedded in the wheel; no separate install is needed
Wheel Distribution
| Platform | Wheel |
|---|---|
| Windows x64 | groupdocs_signature_net-26.10.0-py3-none-win_amd64.whl |
| Linux x64 | groupdocs_signature_net-26.10.0-py3-none-manylinux_2_27_x86_64.whl |
| macOS Intel | groupdocs_signature_net-26.10.0-py3-none-macosx_12_0_x86_64.whl |
| macOS Apple Silicon | groupdocs_signature_net-26.10.0-py3-none-macosx_12_0_arm64.whl |
pip install groupdocs-signature-net==26.10.0
Additional Resources
Feedback
Questions and issues are welcome on the GroupDocs.Signature forum.