We zijn blij de release van GroupDocs.Assembly for Python v26.11 aan te kondigen, beschikbaar vanaf november 2026. Deze release levert grote verbeteringen in platformondersteuning—waaronder de eerste wheels voor Linux en macOS—samen met native Python‑gegevensbronondersteuning, verbeterde foutafhandeling en geüpgrade afhankelijkheden. Het introduceert ook verschillende nieuwe functies en breaking changes om aan te sluiten bij moderne Python‑praktijken en .NET 10.

Wat is nieuw in deze release

  • [Feature] Voeg wheels toe voor Linux x64 en macOS (Intel en Apple Silicon) (ASSEMBLYPYTHON-26)
  • [Feature] Voeg ondersteuning toe voor een Python‑dict of -list als gegevensbron (ASSEMBLYPYTHON-27)
  • [Feature] Voeg ondersteuning toe voor een Python‑handler voor het laden van documenttabellen (IDocumentTableLoadHandler) (ASSEMBLYPYTHON-28)
  • [Feature] Voeg ondersteuning toe voor Python‑typen waar de API een .NET Type verwacht (DocumentTableColumn.type, known_types) (ASSEMBLYPYTHON-29)
  • [Feature] Voeg ondersteuning toe voor het toepassen van de licentie vanuit de GROUPDOCS_LIC_PATH‑omgevingsvariabele (ASSEMBLYPYTHON-30)
  • [Enhancement] Update GroupDocs.Assembly naar 26.7 en de ingebedde runtime naar .NET 10.0.14 (ASSEMBLYPYTHON-31)
  • [Enhancement] Lever een pure‑Python‑pakket voor Python 3.5 – 3.14 in plaats van de gecompileerde extensie (ASSEMBLYPYTHON-32)
  • [Enhancement] Accepteer één DataSourceInfo in assemble_document() evenals een lijst (ASSEMBLYPYTHON-33)
  • [Enhancement] Gooi FileNotFoundError voor een ontbrekend bestand, LicenseError voor een licentie die niet kan worden toegepast, en GroupDocsAssemblyException voor andere engine‑fouten (ASSEMBLYPYTHON-34)
  • [Enhancement] Hernoem BarcodeSettings.x_resolution/y_resolution naar xresolution/yresolution, en maak use_reflection_optimization een klasse‑attribuut (ASSEMBLYPYTHON-35)
  • [Enhancement] Verwijder de 32‑bit Windows‑wheel (ASSEMBLYPYTHON-36)
  • [Fix] Los CVE‑bevindingen op in 25.5.1: zlib 1.2.11 → 1.2.12 (+4 meer) (ASSEMBLYPYTHON-11)

Wijzigingen in de openbare API

Upgraders moeten x_resolution/y_resolution en set_use_reflection_optimization() hernoemen, en GroupDocsAssemblyException en LicenseError opvangen waar ze RuntimeError opvingen. Alles andere is aanvullend.

Nieuwe klassen en leden

  • groupdocs.assembly: FontSettings, FolderFontSource, IFontSource, SearchOption, OoxmlCompliance, GroupDocsAssemblyException, LicenseError, LicenseWarning.
  • LoadSaveOptions: ooxml_compliance.
  • KnownTypeSet: append().
  • DocumentTableCollection, DocumentTableColumnCollection: get().
  • DocumentTableRelationCollection: append(), get().

Hernoemd

  • BarcodeSettings.x_resolution → BarcodeSettings.xresolution
  • BarcodeSettings.y_resolution → BarcodeSettings.yresolution

De oude namen veroorzaken een AttributeError met een “Did you mean” hint, bij lezen en bij toewijzing.

Verwijderd

  • DocumentAssembler.set_use_reflection_optimization(): wijs in plaats daarvan het klasse‑attribuut toe, DocumentAssembler.use_reflection_optimization = False.

Gewijzigd

  • DataSourceInfo accepteert een dict of een list.
  • assemble_document() accepteert één DataSourceInfo evenals een lijst.
  • DocumentTableSet(path, load_handler) accepteert een Python‑functie of een object met handle(args).
  • DocumentTableColumn.type en KnownTypeSet.add() accepteren een Python‑type.
  • Engine‑fouten gooien FileNotFoundError, RuntimeError, LicenseError of GroupDocsAssemblyException. except Exception vangt de fouten van beide releases.

Nieuwe functies

Linux en macOS

26.11 heeft wheels voor Linux x64 (manylinux_2_27_x86_64, glibc 2.27 of nieuwer) en voor macOS 12 of nieuwer op Intel (macosx_12_0_x86_64) en Apple Silicon (macosx_12_0_arm64), naast Windows x64. 25.5 had alleen Windows‑wheels. pip 20.3 of nieuwer kiest de wheel voor het platform. Op Linux heeft de .NET‑runtime ICU nodig, en presentatiesjablonen hebben libgdiplus nodig (zie Requirements).

pip install groupdocs-assembly-net==26.11.0

Python‑gegevens als gegevensbron

DataSourceInfo accepteert een dict, een lijst van dicts of een lijst van waarden; 25.5 gooide TypeError voor een dict. De wrapper zet de gegevens om in .NET‑objecten getypeerd op basis van hun vorm, zodat nummers, strings, bool, datetime, date en Decimal‑waarden het sjabloon getypeerd bereiken: <<[o.OrderDate.Month]>> en <<if [c.Vip]>> werken zoals op .NET‑objecten. Dicts in één lijst delen één type met de unie van hun sleutels.

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: een tabel waarvan de rij <<foreach [o in orders]>><<[o.Number]>> ... <</foreach>> per order wordt herhaald
DocumentAssembler().assemble_document("order-table.docx", "order-table-report.docx", [
    DataSourceInfo("Quayside Bistro", "customer"),
    DataSourceInfo(orders, "orders"),
])

Eén gegevensbron zonder lijst

assemble_document() accepteert één DataSourceInfo of een lijst daarvan, zoals .NET’s params DataSourceInfo[] doet. 25.5 vereiste een lijst en gooide TypeError: can't build Array value from 'groupdocs.assembly.DataSourceInfo' voor één.

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

Tabel‑load‑handlers

DocumentTableSet(path, load_handler) accepteert een Python‑functie (args), of een object met een handle(args)‑methode, en roept deze aan voor elke tabel van het document voordat deze wordt geladen. De handler stelt die tabel’s args.options in, of slaat de tabel over met args.is_loaded = False; args.table_index geeft aan welke tabel het is. 25.5 gooide TypeError voor een Python‑functie.

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 waar de API een .NET‑type verwacht

Een Python‑type staat voor het .NET‑type dat een lid verwacht: float voor System.Double, int, str, bool, datetime. Een kolom van een documenttabel kan numeriek worden gemaakt zodat een grafiek deze optelt, en known_types laat een sjabloon de statische leden van een type aanroepen; het accepteert ook een .NET‑typenaam. 25.5 gooide 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")  # sjablonen kunnen <<[Math.Round(x, 1)]>> aanroepen
assembler.assemble_document("table-row.docx", "table-row-report.docx", DataSourceInfo(contracts, "contracts"))

Licentie vanuit de omgeving

Stel GROUPDOCS_LIC_PATH in op het pad van een licentiebestand, of op een URL die er één levert, en de licentie wordt toegepast bij de eerste engine‑aanroep, zonder licentiecode; 25.5 las de variabele niet. Als die licentie niet kan worden toegepast (een ontbrekend bestand, een verlopen abonnement, een licentie voor een ander product), gooit elke engine‑aanroep LicenseError, met vermelding van de variabele en de reden van de engine, totdat License().set_license() een licentie toepast. Stel GROUPDOCS_LIC_STRICT=0 in om één LicenseWarning en evaluatiemodus te krijgen in plaats daarvan.

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>

Fouten per type

25.5 gooide een kale RuntimeError("Proxy error(<.NET exception>): ...") voor elke engine‑fout. 26.11 gooit FileNotFoundError voor een ontbrekend sjabloon‑ of gegevensbestand, wat nog steeds afstamt van RuntimeError; RuntimeError met alleen het engine‑bericht voor een sjabloon‑fout of een lid dat de gegevens missen; LicenseError voor een licentie die niet kan worden toegepast; en GroupDocsAssemblyException voor de andere engine‑fouten. LicenseError en GroupDocsAssemblyException zijn importeerbaar vanuit groupdocs.assembly en erven niet van 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)

Code‑voorbeeld

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

Hoe de update te krijgen

PyPI

Upgrade naar het nieuwste pakket via PyPI:

groupdocs-assembly-net 26.11.0

pip install groupdocs-assembly-net==26.11.0

Directe download

Download wheels voor uw platform vanaf de GroupDocs.Assembly for Python v26.11 pagina.

Bronnen