Nous sommes heureux d’annoncer la sortie de GroupDocs.Assembly for Python v26.11, disponible depuis novembre 2026. Cette version apporte d’importantes améliorations de prise en charge des plateformes — y compris les premiers wheels pour Linux et macOS — ainsi qu’une prise en charge native des sources de données Python, une gestion des erreurs améliorée et des dépendances mises à jour. Elle introduit également plusieurs nouvelles fonctionnalités et des changements incompatibles afin de s’aligner sur les pratiques Python modernes et .NET 10.
Nouveautés de cette version
- [Feature] Ajouter des wheels pour Linux x64 et macOS (Intel et Apple Silicon) (ASSEMBLYPYTHON-26)
- [Feature] Ajouter la prise en charge d’un dict ou d’une liste Python comme source de données (ASSEMBLYPYTHON-27)
- [Feature] Ajouter la prise en charge d’un gestionnaire Python du chargement de tables de document (
IDocumentTableLoadHandler) (ASSEMBLYPYTHON-28) - [Feature] Ajouter la prise en charge des types Python lorsque l’API attend un
Type.NET (DocumentTableColumn.type,known_types) (ASSEMBLYPYTHON-29) - [Feature] Ajouter la prise en charge de l’application de la licence depuis la variable d’environnement
GROUPDOCS_LIC_PATH(ASSEMBLYPYTHON-30) - [Enhancement] Mettre à jour GroupDocs.Assembly vers la version 26.7 et le runtime intégré vers .NET 10.0.14 (ASSEMBLYPYTHON-31)
- [Enhancement] Distribuer un paquet pure-Python pour Python 3.5 – 3.14 à la place de l’extension compilée (ASSEMBLYPYTHON-32)
- [Enhancement] Accepter un
DataSourceInfodansassemble_document()ainsi qu’une liste (ASSEMBLYPYTHON-33) - [Enhancement] Lever
FileNotFoundErrorpour un fichier manquant,LicenseErrorpour une licence qui ne peut pas être appliquée, etGroupDocsAssemblyExceptionpour les autres erreurs du moteur (ASSEMBLYPYTHON-34) - [Enhancement] Renommer
BarcodeSettings.x_resolution/y_resolutionenxresolution/yresolution, et faire deuse_reflection_optimizationun attribut de classe (ASSEMBLYPYTHON-35) - [Enhancement] Supprimer le wheel Windows 32 bits (ASSEMBLYPYTHON-36)
- [Fix] Corriger les vulnérabilités CVE dans la version 25.5.1 : zlib 1.2.11 → 1.2.12 (+4 autres) (ASSEMBLYPYTHON-11)
Modifications de l’API publique
Les utilisateurs qui mettent à jour doivent renommer x_resolution/y_resolution et set_use_reflection_optimization(), et intercepter GroupDocsAssemblyException et LicenseError là où ils capturaient RuntimeError. Tout le reste est additionnel.
Nouvelles classes et membres
groupdocs.assembly:FontSettings,FolderFontSource,IFontSource,SearchOption,OoxmlCompliance,GroupDocsAssemblyException,LicenseError,LicenseWarning.LoadSaveOptions:ooxml_compliance.KnownTypeSet:append().DocumentTableCollection,DocumentTableColumnCollection:get().DocumentTableRelationCollection:append(),get().
Renommé
BarcodeSettings.x_resolution→BarcodeSettings.xresolutionBarcodeSettings.y_resolution→BarcodeSettings.yresolution
Les anciens noms lèvent AttributeError avec une suggestion « Did you mean », à la lecture et à l’affectation.
Supprimé
DocumentAssembler.set_use_reflection_optimization(): attribuez l’attribut de classe à la place,DocumentAssembler.use_reflection_optimization = False.
Modifié
DataSourceInfoaccepte un dict ou une liste.assemble_document()accepte unDataSourceInfoou une liste.DocumentTableSet(path, load_handler)accepte une fonction Python ou un objet avechandle(args).DocumentTableColumn.typeetKnownTypeSet.add()acceptent un type Python.- Les erreurs du moteur lèvent
FileNotFoundError,RuntimeError,LicenseErrorouGroupDocsAssemblyException.except Exceptioncapture les erreurs des deux versions.
Nouvelles fonctionnalités
Linux et macOS
26.11 propose des wheels pour Linux x64 (manylinux_2_27_x86_64, glibc 2.27 ou plus récent) et pour macOS 12 ou plus récent sur Intel (macosx_12_0_x86_64) et Apple Silicon (macosx_12_0_arm64), en plus de Windows x64. La version 25.5 ne proposait que des wheels Windows. pip 20.3 ou plus récent sélectionne le wheel correspondant à la plateforme. Sous Linux, le runtime .NET nécessite ICU, et les modèles de présentation nécessitent libgdiplus (voir Exigences).
pip install groupdocs-assembly-net==26.11.0
Données Python comme source de données
DataSourceInfo accepte un dict, une liste de dicts ou une liste de valeurs telles quelles ; la version 25.5 levait TypeError pour un dict. L’enveloppe transforme les données en objets .NET typés selon leur forme, ainsi les nombres, chaînes, bool, datetime, date et valeurs Decimal sont accessibles dans le modèle typé : <<[o.OrderDate.Month]>> et <<if [c.Vip]>> fonctionnent comme sur des objets .NET. Les dicts d’une même liste partagent un type avec l’union de leurs clés.
from groupdocs.assembly import DataSourceInfo, DocumentAssembler
orders = [
{"Number": 10001, "Product": "Harbor Blend whole bean coffee", "Quantity": 30, "Price": 552.0},
{"Number": 10004, "Product": "Aged harbour cheddar", "Quantity": 8, "Price": 132.0},
]
# order-table.docx: a table whose row <<foreach [o in orders]>><<[o.Number]>> ... <</foreach>> repeats per order
DocumentAssembler().assemble_document("order-table.docx", "order-table-report.docx", [
DataSourceInfo("Quayside Bistro", "customer"),
DataSourceInfo(orders, "orders"),
])
Une source de données sans liste
assemble_document() accepte un DataSourceInfo ou une liste de ceux‑ci, comme le fait params DataSourceInfo[] de .NET. La version 25.5 nécessitait une liste et levait TypeError: can't build Array value from 'groupdocs.assembly.DataSourceInfo' lorsqu’un seul était fourni.
from groupdocs.assembly import DataSourceInfo, DocumentAssembler
customer = {"Name": "Quayside Bistro", "Product": "Harbor Blend whole bean coffee"}
DocumentAssembler().assemble_document("hello-world.docx", "hello-world-report.docx", DataSourceInfo(customer, "customer"))
Gestionnaires de chargement de tables
DocumentTableSet(path, load_handler) accepte une fonction Python (args), ou un objet avec une méthode handle(args), et l’appelle pour chaque table du document avant son chargement. Le gestionnaire définit args.options pour cette table, ou ignore la table avec args.is_loaded = False ; args.table_index indique quelle table il s’agit. La version 25.5 levait TypeError pour une fonction Python.
from groupdocs.assembly.data import DocumentTableOptions, DocumentTableSet
def on_table(args):
options = DocumentTableOptions()
options.first_row_contains_column_names = True
args.options = options
tables = DocumentTableSet("contracts.xlsx", on_table)
for table in tables.tables:
print(table.name, [column.name for column in table.columns])
Types Python lorsque l’API attend un type .NET
Un type Python représente le type .NET qu’un membre attend : float pour System.Double, int, str, bool, datetime. Une colonne d’une table de document peut être rendue numérique afin qu’un graphique la somme, et known_types permet à un modèle d’appeler les membres statiques d’un type ; il accepte également le nom d’un type .NET. La version 25.5 levait TypeError: can't build Type value from 'type'.
from groupdocs.assembly import DataSourceInfo, DocumentAssembler
from groupdocs.assembly.data import DocumentTable, DocumentTableOptions
options = DocumentTableOptions()
options.first_row_contains_column_names = True
contracts = DocumentTable("contracts.xlsx", 0, options)
contracts.columns["Price"].type = float
assembler = DocumentAssembler()
assembler.known_types.add("System.Math") # templates can call <<[Math.Round(x, 1)]>>
assembler.assemble_document("table-row.docx", "table-row-report.docx", DataSourceInfo(contracts, "contracts"))
Licence depuis l’environnement
Définissez GROUPDOCS_LIC_PATH sur le chemin d’un fichier de licence, ou sur une URL qui en fournit une, et la licence est appliquée lors du premier appel du moteur, sans code de licence ; la version 25.5 ne lisait pas la variable. Si cette licence ne peut pas être appliquée (fichier manquant, abonnement expiré, licence pour un autre produit), chaque appel du moteur lève LicenseError, indiquant la variable et la raison du moteur, jusqu’à ce que License().set_license() applique une licence. Définissez GROUPDOCS_LIC_STRICT=0 pour obtenir un LicenseWarning et le mode d’évaluation à la place.
from groupdocs.assembly import DataSourceInfo, DocumentAssembler, LicenseError
customer = {"Name": "Quayside Bistro", "Product": "Harbor Blend whole bean coffee"}
try:
DocumentAssembler().assemble_document("hello-world.docx", "hello-world-report.docx", DataSourceInfo(customer, "customer"))
except LicenseError as e:
print(e) # GROUPDOCS_LIC_PATH=... could not be applied: <reason>
Erreurs par type
La version 25.5 levait un RuntimeError brut (« Proxy error(<.NET exception>): … ») pour chaque erreur du moteur. La version 26.11 lève FileNotFoundError pour un modèle ou un fichier de données manquant, qui dérive toujours de RuntimeError ; RuntimeError avec uniquement le message du moteur pour une erreur de modèle ou un membre manquant dans les données ; LicenseError pour une licence qui ne peut pas être appliquée ; et GroupDocsAssemblyException pour les autres erreurs du moteur. LicenseError et GroupDocsAssemblyException sont importables depuis groupdocs.assembly et ne dérivent pas de RuntimeError.
from groupdocs.assembly import DataSourceInfo, DocumentAssembler, GroupDocsAssemblyException
try:
DocumentAssembler().assemble_document("no-such-template.docx", "report.docx", DataSourceInfo({"Name": "A"}, "customer"))
except FileNotFoundError as e:
print("missing:", e)
except (RuntimeError, GroupDocsAssemblyException) as e:
print("engine:", e)
Exemple de code
from groupdocs.assembly import DataSourceInfo, DocumentAssembler, FileFormat, LoadSaveOptions, OoxmlCompliance
options = LoadSaveOptions(FileFormat.DOCX)
options.ooxml_compliance = OoxmlCompliance.STRICT
customer = {"Name": "Quayside Bistro", "Product": "Harbor Blend whole bean coffee"}
DocumentAssembler().assemble_document("hello-world.docx", "hello-world-strict.docx", options, DataSourceInfo(customer, "customer"))
Comment obtenir la mise à jour
PyPI
Mettre à jour vers le dernier paquet via PyPI :
groupdocs-assembly-net 26.11.0
pip install groupdocs-assembly-net==26.11.0
Téléchargement direct
Téléchargez les wheels pour votre plateforme depuis la page GroupDocs.Assembly for Python v26.11.