Kami senang mengumumkan rilis GroupDocs.Assembly for Python v26.11, tersedia sejak November 2026. Rilis ini menghadirkan perbaikan dukungan platform utama—termasuk roda pertama untuk Linux dan macOS—serta dukungan sumber data Python native, penanganan error yang ditingkatkan, dan dependensi yang diperbarui. Ini juga memperkenalkan beberapa fitur baru dan perubahan yang memecah kompatibilitas untuk menyesuaikan dengan praktik Python modern dan .NET 10.

Apa yang baru di rilis ini

  • [Feature] Tambahkan roda untuk Linux x64 dan macOS (Intel dan Apple Silicon) (ASSEMBLYPYTHON-26)
  • [Feature] Tambahkan dukungan untuk dict atau list Python sebagai sumber data (ASSEMBLYPYTHON-27)
  • [Feature] Tambahkan dukungan untuk penangan Python pemuatan tabel dokumen (IDocumentTableLoadHandler) (ASSEMBLYPYTHON-28)
  • [Feature] Tambahkan dukungan untuk tipe Python ketika API menerima .NET Type (DocumentTableColumn.type, known_types) (ASSEMBLYPYTHON-29)
  • [Feature] Tambahkan dukungan untuk menerapkan lisensi dari variabel lingkungan GROUPDOCS_LIC_PATH (ASSEMBLYPYTHON-30)
  • [Enhancement] Perbarui GroupDocs.Assembly ke 26.7 dan runtime tersemat ke .NET 10.0.14 (ASSEMBLYPYTHON-31)
  • [Enhancement] Distribusikan paket pure-Python untuk Python 3.5 – 3.14 menggantikan ekstensi yang dikompilasi (ASSEMBLYPYTHON-32)
  • [Enhancement] Terima satu DataSourceInfo dalam assemble_document() serta daftar (ASSEMBLYPYTHON-33)
  • [Enhancement] Melempar FileNotFoundError untuk file yang hilang, LicenseError untuk lisensi yang tidak dapat diterapkan, dan GroupDocsAssemblyException untuk error mesin lainnya (ASSEMBLYPYTHON-34)
  • [Enhancement] Ganti nama BarcodeSettings.x_resolution/y_resolution menjadi xresolution/yresolution, dan jadikan use_reflection_optimization atribut kelas (ASSEMBLYPYTHON-35)
  • [Enhancement] Hapus roda Windows 32-bit (ASSEMBLYPYTHON-36)
  • [Fix] Perbaiki temuan CVE di 25.5.1: zlib 1.2.11 → 1.2.12 (+4 lagi) (ASSEMBLYPYTHON-11)

Perubahan API Publik

Pengguna yang melakukan upgrade perlu mengganti nama x_resolution/y_resolution dan set_use_reflection_optimization(), serta menangkap GroupDocsAssemblyException dan LicenseError di tempat mereka menangkap RuntimeError. Semua hal lain bersifat tambahan.

Kelas dan anggota baru

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

Diganti Nama

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

Nama lama akan memunculkan AttributeError dengan petunjuk “Apakah maksud Anda” saat dibaca maupun saat penugasan.

Dihapus

  • DocumentAssembler.set_use_reflection_optimization(): alokasikan atribut kelas sebagai gantinya, DocumentAssembler.use_reflection_optimization = False.

Diubah

  • DataSourceInfo menerima dict atau list.
  • assemble_document() menerima satu DataSourceInfo serta daftar.
  • DocumentTableSet(path, load_handler) menerima fungsi Python atau objek dengan handle(args).
  • DocumentTableColumn.type dan KnownTypeSet.add() menerima tipe Python.
  • Error mesin memunculkan FileNotFoundError, RuntimeError, LicenseError, atau GroupDocsAssemblyException. except Exception menangkap error dari kedua rilis.

Fitur baru

Linux dan macOS

26.11 memiliki roda untuk Linux x64 (manylinux_2_27_x86_64, glibc 2.27 atau lebih baru) dan untuk macOS 12 atau lebih baru pada Intel (macosx_12_0_x86_64) serta Apple Silicon (macosx_12_0_arm64), selain Windows x64. 25.5 hanya memiliki roda Windows. pip 20.3 atau lebih baru akan memilih roda yang sesuai dengan platform. Pada Linux runtime .NET memerlukan ICU, dan templat presentasi memerlukan libgdiplus (lihat Requirements).

pip install groupdocs-assembly-net==26.11.0

Data Python sebagai sumber data

DataSourceInfo menerima dict, daftar dict, atau daftar nilai sebagaimana adanya; 25.5 memunculkan TypeError untuk dict. Pembungkus mengubah data menjadi objek .NET yang bertipe sesuai bentuknya, sehingga angka, string, bool, datetime, date, dan nilai Decimal dapat diakses dalam templat dengan tipe: <<[o.OrderDate.Month]>> dan <<if [c.Vip]>> berfungsi seperti pada objek .NET. Dict dalam satu daftar berbagi satu tipe dengan gabungan kunci mereka.

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

Satu sumber data tanpa daftar

assemble_document() menerima satu DataSourceInfo atau daftar dari mereka, seperti params DataSourceInfo[] di .NET. 25.5 mengharuskan daftar dan memunculkan TypeError: can't build Array value from 'groupdocs.assembly.DataSourceInfo' untuk satu.

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

Penangan pemuatan tabel

DocumentTableSet(path, load_handler) menerima fungsi Python (args), atau objek dengan metode handle(args), dan memanggilnya untuk setiap tabel dokumen sebelum dimuat. Penangan mengatur args.options tabel tersebut, atau melewatkan tabel dengan args.is_loaded = False; args.table_index menunjukkan tabel ke berapa. 25.5 memunculkan TypeError untuk fungsi 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])

Tipe Python ketika API menerima tipe .NET

Tipe Python mewakili tipe .NET yang diterima anggota: float untuk System.Double, int, str, bool, datetime. Kolom tabel dokumen dapat dijadikan numerik sehingga diagram dapat menjumlahkannya, dan known_types memungkinkan templat memanggil anggota statis sebuah tipe; ia juga menerima nama tipe .NET. 25.5 memunculkan 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"))

Lisensi dari lingkungan

Setel GROUPDOCS_LIC_PATH ke jalur file lisensi, atau ke URL yang menyajikannya, dan lisensi akan diterapkan pada pemanggilan mesin pertama, tanpa kode lisensi; 25.5 tidak membaca variabel tersebut. Jika lisensi tersebut tidak dapat diterapkan (file hilang, langganan kedaluwarsa, lisensi untuk produk lain), setiap pemanggilan mesin akan memunculkan LicenseError, menyebutkan variabel dan alasan mesin, sampai License().set_license() menerapkan lisensi. Setel GROUPDOCS_LIC_STRICT=0 untuk mendapatkan satu LicenseWarning dan mode evaluasi sebagai gantinya.

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>

Error berdasarkan jenis

25.5 memunculkan RuntimeError("Proxy error(<.NET exception>): ...") untuk setiap error mesin. 26.11 memunculkan FileNotFoundError untuk templat atau file data yang hilang, yang masih merupakan turunan dari RuntimeError; RuntimeError dengan pesan mesin saja untuk error templat atau anggota yang tidak ada dalam data; LicenseError untuk lisensi yang tidak dapat diterapkan; dan GroupDocsAssemblyException untuk error mesin lainnya. LicenseError dan GroupDocsAssemblyException dapat diimpor dari groupdocs.assembly dan tidak merupakan turunan dari 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)

Contoh kode

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

Cara mendapatkan pembaruan

PyPI

Upgrade ke paket terbaru melalui PyPI:

groupdocs-assembly-net 26.11.0

pip install groupdocs-assembly-net==26.11.0

Unduhan langsung

Unduh roda untuk platform Anda dari halaman GroupDocs.Assembly for Python v26.11.

Sumber daya