Wir freuen uns, die Veröffentlichung von GroupDocs.Assembly for Python v26.11 bekannt zu geben, verfügbar seit November 2026. Dieses Release liefert bedeutende Verbesserungen der Plattformunterstützung – einschließlich der ersten Wheels für Linux und macOS – sowie native Unterstützung von Python‑Datenquellen, verbesserte Fehlerbehandlung und aktualisierte Abhängigkeiten. Es führt außerdem mehrere neue Funktionen und Breaking Changes ein, um sich an moderne Python‑Praktiken und .NET 10 anzupassen.
Was ist neu in diesem Release
- [Feature] Wheels für Linux x64 und macOS (Intel und Apple Silicon) hinzufügen (ASSEMBLYPYTHON-26)
- [Feature] Unterstützung für ein Python‑dict oder eine Liste als Datenquelle hinzufügen (ASSEMBLYPYTHON-27)
- [Feature] Unterstützung für einen Python‑Handler zum Laden von Dokumenttabellen (
IDocumentTableLoadHandler) hinzufügen (ASSEMBLYPYTHON-28) - [Feature] Unterstützung für Python‑Typen hinzufügen, wenn die API einen .NET
Typeerwartet (DocumentTableColumn.type,known_types) (ASSEMBLYPYTHON-29) - [Feature] Unterstützung für das Anwenden der Lizenz aus der Umgebungsvariable
GROUPDOCS_LIC_PATHhinzufügen (ASSEMBLYPYTHON-30) - [Enhancement] GroupDocs.Assembly auf 26.7 aktualisieren und die eingebettete Runtime auf .NET 10.0.14 (ASSEMBLYPYTHON-31)
- [Enhancement] Ein reines Python‑Paket für Python 3.5 – 3.14 anstelle der kompilierten Erweiterung bereitstellen (ASSEMBLYPYTHON-32)
- [Enhancement] Einen einzelnen
DataSourceInfoinassemble_document()sowie eine Liste akzeptieren (ASSEMBLYPYTHON-33) - [Enhancement]
FileNotFoundErrorfür eine fehlende Datei,LicenseErrorfür eine Lizenz, die nicht angewendet werden kann, undGroupDocsAssemblyExceptionfür andere Engine‑Fehler auslösen (ASSEMBLYPYTHON-34) - [Enhancement]
BarcodeSettings.x_resolution/y_resolutioninxresolution/yresolutionumbenennen unduse_reflection_optimizationzu einem Klassenattribut machen (ASSEMBLYPYTHON-35) - [Enhancement] Das 32‑Bit‑Windows‑Wheel entfernen (ASSEMBLYPYTHON-36)
- [Fix] CVE‑Ergebnisse in 25.5.1 beheben: zlib 1.2.11 → 1.2.12 (+4 weitere) (ASSEMBLYPYTHON-11)
Änderungen der öffentlichen API
Upgrader müssen x_resolution/y_resolution und set_use_reflection_optimization() umbenennen und GroupDocsAssemblyException sowie LicenseError abfangen, wo zuvor RuntimeError abgefangen wurde. Alles andere ist ergänzend.
Neue Klassen und Mitglieder
groupdocs.assembly:FontSettings,FolderFontSource,IFontSource,SearchOption,OoxmlCompliance,GroupDocsAssemblyException,LicenseError,LicenseWarning.LoadSaveOptions:ooxml_compliance.KnownTypeSet:append().DocumentTableCollection,DocumentTableColumnCollection:get().DocumentTableRelationCollection:append(),get().
Umbenannt
BarcodeSettings.x_resolution→BarcodeSettings.xresolutionBarcodeSettings.y_resolution→BarcodeSettings.yresolution
Die alten Namen lösen ein AttributeError mit einem Hinweis „Meinten Sie“ aus, sowohl beim Lesen als auch beim Zuweisen.
Entfernt
DocumentAssembler.set_use_reflection_optimization(): Stattdessen das Klassenattribut zuweisen,DocumentAssembler.use_reflection_optimization = False.
Geändert
DataSourceInfoakzeptiert ein dict oder eine Liste.assemble_document()akzeptiert einen einzelnenDataSourceInfosowie eine Liste.DocumentTableSet(path, load_handler)akzeptiert eine Python‑Funktion oder ein Objekt mithandle(args).DocumentTableColumn.typeundKnownTypeSet.add()akzeptieren einen Python‑Typ.- Engine‑Fehler lösen
FileNotFoundError,RuntimeError,LicenseErroroderGroupDocsAssemblyExceptionaus.except Exceptionfängt die Fehler beider Releases ab.
Neue Funktionen
Linux und macOS
26.11 enthält Wheels für Linux x64 (manylinux_2_27_x86_64, glibc 2.27 oder neuer) und für macOS 12 oder neuer auf Intel (macosx_12_0_x86_64) sowie Apple Silicon (macosx_12_0_arm64), neben Windows x64. 25.5 hatte nur Windows‑Wheels. pip 20.3 oder neuer wählt das passende Wheel für die Plattform aus. Unter Linux benötigt die .NET‑Runtime ICU, und Präsentations‑Templates benötigen libgdiplus (siehe Requirements).
pip install groupdocs-assembly-net==26.11.0
Python‑Daten als Datenquelle
DataSourceInfo akzeptiert ein dict, eine Liste von dicts oder eine Liste von Werten, wie sie ist; 25.5 löste einen TypeError für ein dict aus. Der Wrapper wandelt die Daten in .NET‑Objekte um, die anhand ihrer Struktur typisiert werden, sodass Zahlen, Zeichenketten, bool, datetime, date und Decimal‑Werte im Template typisiert ankommen: <<[o.OrderDate.Month]>> und <<if [c.Vip]>> funktionieren wie bei .NET‑Objekten. Dicts in einer Liste teilen sich einen Typ, der die Vereinigung ihrer Schlüssel ist.
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"),
])
Eine Datenquelle ohne Liste
assemble_document() akzeptiert einen einzelnen DataSourceInfo oder eine Liste davon, wie .NETs params DataSourceInfo[] es tut. 25.5 erforderte eine Liste und löste TypeError: can't build Array value from 'groupdocs.assembly.DataSourceInfo' für einen einzelnen aus.
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"))
Tabellen‑Lade‑Handler
DocumentTableSet(path, load_handler) akzeptiert eine Python‑Funktion (args) oder ein Objekt mit einer handle(args)‑Methode und ruft sie für jede Tabelle des Dokuments vor dem Laden auf. Der Handler setzt args.options für diese Tabelle oder überspringt die Tabelle mit args.is_loaded = False; args.table_index gibt an, welche Tabelle es ist. 25.5 löste einen TypeError für eine Python‑Funktion aus.
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])
Python‑Typen, wo die API einen .NET‑Typ erwartet
Ein Python‑Typ steht für den .NET‑Typ, den ein Mitglied erwartet: float für System.Double, int, str, bool, datetime. Eine Spalte einer Dokumenttabelle kann numerisch gemacht werden, sodass ein Diagramm sie summiert, und known_types ermöglicht es einem Template, statische Mitglieder eines Typs aufzurufen; es akzeptiert auch einen .NET‑Typnamen. 25.5 löste TypeError: can't build Type value from 'type' aus.
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"))
Lizenz aus der Umgebung
Setzen Sie GROUPDOCS_LIC_PATH auf den Pfad einer Lizenzdatei oder auf eine URL, die eine solche bereitstellt, und die Lizenz wird beim ersten Engine‑Aufruf angewendet, ohne Lizenzcode; 25.5 las die Variable nicht. Wenn diese Lizenz nicht angewendet werden kann (fehlende Datei, abgelaufenes Abonnement, Lizenz für ein anderes Produkt), löst jeder Engine‑Aufruf LicenseError aus, wobei die Variable und der Grund der Engine genannt werden, bis License().set_license() eine Lizenz anwendet. Setzen Sie GROUPDOCS_LIC_STRICT=0, um stattdessen ein LicenseWarning und den Evaluierungsmodus zu erhalten.
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>
Fehler nach Art
25.5 löste für jeden Engine‑Fehler ein einfaches RuntimeError("Proxy error(<.NET exception>): ...") aus. 26.11 löst FileNotFoundError für eine fehlende Template‑ oder Datendatei aus, das immer noch von RuntimeError abgeleitet ist; RuntimeError mit nur der Engine‑Nachricht für einen Template‑Fehler oder ein fehlendes Datenelement; LicenseError für eine Lizenz, die nicht angewendet werden kann; und GroupDocsAssemblyException für die anderen Engine‑Fehler. LicenseError und GroupDocsAssemblyException können aus groupdocs.assembly importiert werden und leiten nicht von RuntimeError ab.
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)
Code‑Beispiel
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"))
Wie Sie das Update erhalten
PyPI
Aktualisieren Sie das neueste Paket über PyPI:
groupdocs-assembly-net 26.11.0
pip install groupdocs-assembly-net==26.11.0
Direkter Download
Laden Sie Wheels für Ihre Plattform von der Seite GroupDocs.Assembly for Python v26.11 herunter.