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, IDataEncryption and ICustomSignHash implementations (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, IncorrectPasswordException and PasswordRequiredException instead of RuntimeError (SIGNATUREPYTHON-26)
  • [Enhancement] Raise AttributeError when 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 datetime and Decimal values to .NET unchanged (SIGNATUREPYTHON-29)
  • [Enhancement] Update wheel platform tags to manylinux_2_27 and macosx_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_PATH is 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.

Resources