Siamo felici di annunciare il rilascio di GroupDocs.Signature for Python v26.10, disponibile a partire da ottobre 2026. Questa versione importante aggiorna il motore sottostante di GroupDocs.Signature da 25.12 a 26.9 e migra il runtime .NET incorporato da .NET Core 3.1 a .NET 10.0.12. Introduce callback in stile Python per i flussi di anteprima, logger, crittografia dei dati e supporto per hash di firma personalizzati, aggiunge piena compatibilità con Python 3.14 e risolve problemi critici di importazione su Linux. Questa release comprende due nuove funzionalità, cinque miglioramenti e due correzioni di bug.

Novità di questa versione

  • [Funzionalità] Accetta funzioni Python come callback di anteprima di pagina e firma (SIGNATUREPYTHON-21)
  • [Funzionalità] Accetta oggetti Python come implementazioni di ILogger, IDataEncryption e ICustomSignHash (SIGNATUREPYTHON-22)
  • [Funzionalità] Aggiunge il supporto per Python 3.14 (SIGNATUREPYTHON-23)
  • [Miglioramento] Aggiorna il motore GroupDocs.Signature da 25.12 a 26.9 (SIGNATUREPYTHON-24)
  • [Miglioramento] Aggiorna il runtime .NET incorporato da .NET Core 3.1 a .NET 10.0.12 (SIGNATUREPYTHON-25)
  • [Miglioramento] Genera GroupDocsSignatureException, IncorrectPasswordException e PasswordRequiredException invece di RuntimeError (SIGNATUREPYTHON-26)
  • [Miglioramento] Genera AttributeError quando il codice assegna un attributo che la classe non possiede (SIGNATUREPYTHON-27)
  • [Miglioramento] Rinomina i membri i cui nomi Python separano parole .NET (z_order → zorder, x_ad_es_type → xad_es_type) (SIGNATUREPYTHON-28)
  • [Miglioramento] Sceglie le overload in base al contenuto di una lista e passa valori datetime e Decimal a .NET invariati (SIGNATUREPYTHON-29)
  • [Miglioramento] Aggiorna i tag di piattaforma wheel a manylinux_2_27 e macosx_12_0, e rimuove la wheel Windows a 32 bit (SIGNATUREPYTHON-30)
  • [Correzione] La wheel Linux non può essere importata sulle distribuzioni attuali (SIGNATUREPYTHON-31)
  • [Correzione] GROUPDOCS_LIC_PATH viene ignorato (SIGNATUREPYTHON-32)

Modifiche all’API pubblica

Gli aggiornamenti richiedono di adeguarsi ai membri rinominati, ai nuovi tipi di eccezione e ai tag di piattaforma aggiornati. Le assegnazioni di attributi ora generano AttributeError e i callback possono essere semplici callable Python.

Nuove classi e membri

  • 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: un costruttore; prima non ne aveva.
  • PreviewSignatureOptions: un costruttore; prima non ne aveva.
  • SearchResult: get_enumerator(), to_list().
  • Signature: dispose().
  • SignatureSettings: default_culture.
  • WordProcessingSaveOptions: ooxml_compliance.

Rinominati

Classe Nome vecchio Nome nuovo
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

Nuove funzionalità

Generazione dell’anteprima con callback Python

PreviewOptions può ora essere costruito con semplici funzioni Python. Il callback create riceve un oggetto page_data e deve restituire uno stream scrivibile (oggetto file o io.BytesIO). Il callback release viene chiamato dopo che l’immagine è stata scritta e riceve lo stesso page_data e lo 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))

Oggetti Python come logger, crittografia e callback hash personalizzati

Oggetti Python semplici possono ora implementare le interfacce ILogger, IDataEncryption e ICustomSignHash. Un oggetto logger con i metodi trace, warning e error può essere passato a SignatureSettings. Un oggetto di crittografia con i metodi encode e decode può essere assegnato a options.data_encryption su firme QR‑code o metadata. Un hash signer personalizzato può essere una funzione o un oggetto con un metodo custom_sign_hash ed è utilizzato da 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)

Supporto per Python 3.14

La wheel ora dichiara python_requires=">=3.5,<3.15" e una singola wheel per piattaforma copre Python 3.5 – 3.14. Non sono necessarie modifiche al codice; lo stesso import e utilizzo funzionano con l’interprete più recente.

Esempio di codice

Vedi la sezione “Nuove funzionalità” sopra per esempi di codice funzionanti che dimostrano i callback Python per la generazione dell’anteprima e le implementazioni personalizzate di logger/criptazione.

Come ottenere l’aggiornamento

PyPI

Aggiorna al pacchetto più recente di GroupDocs.Signature for Python tramite PyPI: groupdocs-signature-net 26.10.0

Installa con:

pip install groupdocs-signature-net==26.10.0

Download diretto

Scarica i pacchetti wheel direttamente dalla pagina di rilascio GroupDocs.Signature for Python v26.10.

Risorse