我们很高兴宣布 GroupDocs.Signature for Python v26.10 已于 2026年10月 正式发布。此重大版本将底层 GroupDocs.Signature 引擎从 25.12 升级至 26.9,并将嵌入的 .NET 运行时从 .NET Core 3.1 迁移至 .NET 10.0.12。它引入了用于预览流、日志记录、数据加密和自定义签名哈希的 Python 风格回调,全面兼容 Python 3.14,并解决了 Linux 上的关键导入问题。本次发布包含两项主要功能、五项增强以及两项错误修复。

本次发布的新功能

  • [Feature] 接受 Python 函数作为页面和签名预览回调 (SIGNATUREPYTHON-21)
  • [Feature] 接受 Python 对象作为 ILogger、IDataEncryption 和 ICustomSignHash 实现 (SIGNATUREPYTHON-22)
  • [Feature] 添加对 Python 3.14 的支持 (SIGNATUREPYTHON-23)
  • [Enhancement] 将 GroupDocs.Signature 引擎从 25.12 更新至 26.9 (SIGNATUREPYTHON-24)
  • [Enhancement] 将嵌入的 .NET 运行时从 .NET Core 3.1 更新至 .NET 10.0.12 (SIGNATUREPYTHON-25)
  • [Enhancement] 抛出 GroupDocsSignatureException、IncorrectPasswordException 和 PasswordRequiredException,而不是 RuntimeError (SIGNATUREPYTHON-26)
  • [Enhancement] 当代码为类不存在的属性赋值时抛出 AttributeError (SIGNATUREPYTHON-27)
  • [Enhancement] 重命名 Python 名称中拆分 .NET 单词的成员(z_order → zorder,x_ad_es_type → xad_es_type)(SIGNATUREPYTHON-28)
  • [Enhancement] 通过列表内容选择重载,并将 datetime 和 Decimal 值原样传递给 .NET (SIGNATUREPYTHON-29)
  • [Enhancement] 将 wheel 平台标签更新为 manylinux_2_27 和 macosx_12_0,并移除 32 位 Windows wheel (SIGNATUREPYTHON-30)
  • [Fix] 当前发行版的 Linux wheel 无法导入 (SIGNATUREPYTHON-31)
  • [Fix] GROUPDOCS_LIC_PATH 被忽略 (SIGNATUREPYTHON-32)

公共 API 更改

升级者需要适配已重命名的成员、新的异常类型以及更新后的平台标签。属性赋值现在会抛出 AttributeError,回调可以是普通的 Python 可调用对象。

新类和成员

  • 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.

已重命名

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

新功能

使用 Python 回调生成预览

PreviewOptions 现在可以使用普通的 Python 函数进行构造。create 回调接收一个 page_data 对象,并必须返回一个可写流(文件对象或 io.BytesIO)。release 回调在图像写入完成后被调用,接收相同的 page_data 和流。

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 对象作为日志记录、加密和自定义哈希回调

普通的 Python 对象现在可以实现 ILogger、IDataEncryption 和 ICustomSignHash 接口。具有 trace、warning 和 error 方法的日志对象可以传递给 SignatureSettings。具有 encode 和 decode 方法的加密对象可以分配给 QR 码或元数据签名的 options.data_encryption。自定义哈希签名器可以是函数或具有 custom_sign_hash 方法的对象,并由 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)

支持 Python 3.14

wheel 现在声明 python_requires=">=3.5,<3.15",单个平台的 wheel 覆盖 Python 3.5 – 3.14。无需代码更改,使用相同的导入方式和用法即可在新版解释器上运行。

代码示例

请参阅上面的 “新功能” 部分,了解展示 Python 回调生成预览以及自定义日志/加密实现的完整代码示例。

如何获取更新

PyPI

通过 PyPI 将 GroupDocs.Signature for Python 包升级至最新版本:groupdocs-signature-net 26.10.0

使用以下命令安装:

pip install groupdocs-signature-net==26.10.0

Direct download

直接从 GroupDocs.Signature for Python v26.10 发布页面 下载 wheel 包。

资源