We’re happy to announce the release of GroupDocs.Signature for Python v26.10, available as of October 2026. This major release upgrades the underlying GroupDocs.Signature engine from 25.12 to 26.9 and migrates the embedded .NET runtime from .NET Core 3.1 to .NET 10.0.12. It introduces Python-style callbacks for preview streams, logger, data encryption, and custom sign hash support, adds full compatibility with Python 3.14, and resolves critical import issues on Linux. This release includes two major features, five enhancements, and two bug fixes.
What’s new in this release
- [Feature] Accept Python functions as page and signature preview callbacks (SIGNATUREPYTHON-21)
- [Feature] Accept Python objects as
ILogger,IDataEncryptionandICustomSignHashimplementations (SIGNATUREPYTHON-22) - [Feature] Add support for Python 3.14 (SIGNATUREPYTHON-23)
- [Enhancement] Update GroupDocs.Signature engine from 25.12 to 26.9 (SIGNATUREPYTHON-24)
- [Enhancement] Update the embedded .NET runtime from .NET Core 3.1 to .NET 10.0.12 (SIGNATUREPYTHON-25)
- [Enhancement] Raise
GroupDocsSignatureException,IncorrectPasswordExceptionandPasswordRequiredExceptioninstead ofRuntimeError(SIGNATUREPYTHON-26) - [Enhancement] Raise
AttributeErrorwhen code assigns an attribute a class does not have (SIGNATUREPYTHON-27) - [Enhancement] Rename members whose Python names split .NET words (
z_order→zorder,x_ad_es_type→xad_es_type) (SIGNATUREPYTHON-28) - [Enhancement] Choose overloads by the contents of a list, and pass
datetimeandDecimalvalues to .NET unchanged (SIGNATUREPYTHON-29) - [Enhancement] Update wheel platform tags to
manylinux_2_27andmacosx_12_0, and drop the 32-bit Windows wheel (SIGNATUREPYTHON-30) - [Fix] The Linux wheel cannot be imported on current distributions (SIGNATUREPYTHON-31)
- [Fix]
GROUPDOCS_LIC_PATHis ignored (SIGNATUREPYTHON-32)
Public 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 |
New 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.
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.
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. No code changes are required; the same import and usage work on the newer interpreter.
Code example
See the “New features” section above for working code examples demonstrating Python callbacks for preview generation and custom logger/encryption implementations.
How to get the update
PyPI
Upgrade to the latest GroupDocs.Signature for Python package via PyPI: groupdocs-signature-net 26.10.0
Install with:
pip install groupdocs-signature-net==26.10.0
Direct download
Download the wheel packages directly from the GroupDocs.Signature for Python v26.10 release page.