¡Nos complace anunciar el lanzamiento de GroupDocs.Signature for Python v26.10, disponible a partir de octubre de 2026! Esta versión importante actualiza el motor subyacente de GroupDocs.Signature de 25.12 a 26.9 y migra el runtime .NET incrustado de .NET Core 3.1 a .NET 10.0.12. Introduce callbacks al estilo Python para flujos de vista previa, logger, cifrado de datos y soporte de hash de firma personalizado, añade compatibilidad total con Python 3.14 y resuelve problemas críticos de importación en Linux. Esta versión incluye dos funcionalidades principales, cinco mejoras y dos correcciones de errores.

Novedades en esta versión

  • [Funcionalidad] Aceptar funciones de Python como callbacks de vista previa de página y firma (SIGNATUREPYTHON-21)
  • [Funcionalidad] Aceptar objetos de Python como implementaciones de ILogger, IDataEncryption e ICustomSignHash (SIGNATUREPYTHON-22)
  • [Funcionalidad] Añadir soporte para Python 3.14 (SIGNATUREPYTHON-23)
  • [Mejora] Actualizar el motor GroupDocs.Signature de 25.12 a 26.9 (SIGNATUREPYTHON-24)
  • [Mejora] Actualizar el runtime .NET incrustado de .NET Core 3.1 a .NET 10.0.12 (SIGNATUREPYTHON-25)
  • [Mejora] Lanzar GroupDocsSignatureException, IncorrectPasswordException y PasswordRequiredException en lugar de RuntimeError (SIGNATUREPYTHON-26)
  • [Mejora] Lanzar AttributeError cuando el código asigna un atributo que la clase no posee (SIGNATUREPYTHON-27)
  • [Mejora] Renombrar miembros cuyos nombres en Python separan palabras de .NET (z_order → zorder, x_ad_es_type → xad_es_type) (SIGNATUREPYTHON-28)
  • [Mejora] Elegir sobrecargas según el contenido de una lista y pasar valores datetime y Decimal a .NET sin cambios (SIGNATUREPYTHON-29)
  • [Mejora] Actualizar las etiquetas de plataforma de la rueda a manylinux_2_27 y macosx_12_0, y eliminar la rueda de Windows de 32 bits (SIGNATUREPYTHON-30)
  • [Corrección] La rueda para Linux no podía importarse en distribuciones actuales (SIGNATUREPYTHON-31)
  • [Corrección] GROUPDOCS_LIC_PATH se ignora (SIGNATUREPYTHON-32)

Cambios en la API pública

Los usuarios que actualicen deberán adaptarse a los miembros renombrados, los nuevos tipos de excepción y las etiquetas de plataforma actualizadas. Las asignaciones de atributos ahora lanzan AttributeError y los callbacks pueden ser simples callables de Python.

Nuevas clases y miembros

  • 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 constructor; antes no existía.
  • PreviewSignatureOptions: un constructor; antes no existía.
  • SearchResult: get_enumerator(), to_list().
  • Signature: dispose().
  • SignatureSettings: default_culture.
  • WordProcessingSaveOptions: ooxml_compliance.

Renombrado

Clase Nombre antiguo Nombre nuevo
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

Nuevas funcionalidades

Generación de vista previa con callbacks de Python

PreviewOptions ahora puede construirse con funciones simples de Python. El callback create recibe un objeto page_data y debe devolver un flujo escribible (objeto de archivo o io.BytesIO). El callback release se invoca después de que la imagen se haya escrito y recibe el mismo page_data y el flujo.

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))

Objetos Python como logger, cifrado y callbacks de hash personalizados

Ahora los objetos simples de Python pueden implementar las interfaces ILogger, IDataEncryption e ICustomSignHash. Un objeto logger con métodos trace, warning y error puede pasarse a SignatureSettings. Un objeto de cifrado con métodos encode y decode puede asignarse a options.data_encryption en firmas QR‑code o de metadatos. Un firmante de hash personalizado puede ser una función o un objeto con un método custom_sign_hash y se utiliza mediante 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)

Compatibilidad con Python 3.14

La rueda ahora declara python_requires=">=3.5,<3.15" y una única rueda por plataforma cubre Python 3.5 – 3.14. No se requieren cambios de código; la misma importación y uso funcionan con el intérprete más reciente.

Ejemplo de código

Consulte la sección “Nuevas funcionalidades” anterior para ver ejemplos de código que demuestran los callbacks de Python para la generación de vistas previas y las implementaciones de logger/cifrado personalizados.

Cómo obtener la actualización

PyPI

Actualice al último paquete GroupDocs.Signature for Python mediante PyPI: groupdocs-signature-net 26.10.0

Instale con:

pip install groupdocs-signature-net==26.10.0

Descarga directa

Descargue los paquetes wheel directamente desde la página de notas de la versión GroupDocs.Signature for Python v26.10.

Recursos