我们很高兴宣布 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 包。