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
DataSourceInfodalamassemble_document()serta daftar (ASSEMBLYPYTHON-33) - [Enhancement] Melempar
FileNotFoundErroruntuk file yang hilang,LicenseErroruntuk lisensi yang tidak dapat diterapkan, danGroupDocsAssemblyExceptionuntuk error mesin lainnya (ASSEMBLYPYTHON-34) - [Enhancement] Ganti nama
BarcodeSettings.x_resolution/y_resolutionmenjadixresolution/yresolution, dan jadikanuse_reflection_optimizationatribut 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.xresolutionBarcodeSettings.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
DataSourceInfomenerima dict atau list.assemble_document()menerima satuDataSourceInfoserta daftar.DocumentTableSet(path, load_handler)menerima fungsi Python atau objek denganhandle(args).DocumentTableColumn.typedanKnownTypeSet.add()menerima tipe Python.- Error mesin memunculkan
FileNotFoundError,RuntimeError,LicenseError, atauGroupDocsAssemblyException.except Exceptionmenangkap 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.