Kami senang mengumumkan rilis GroupDocs.Parser for Python v26.10, tersedia sejak November 2026. Rilis ini meningkatkan mesin dasar ke versi 26.8 dan beralih dari .NET Core 3.1 ke .NET 10.0.14, memperbaiki dua kerentanan penolakan layanan di System.Security.Cryptography.Pkcs. Rilis ini memperkenalkan fitur baru utama termasuk ekstraksi anotasi, parsing tabel HTML, OCR untuk bahasa Arab dan Korea, logger Python, penanganan sumber daya eksternal, callback pratinjau sebagai fungsi biasa, dan alat baris perintah groupdocs-parser. Wheel kini menjadi paket pure-Python yang menargetkan Python 3.5 – 3.14, dengan tag platform yang diperbarui (manylinux_2_27_x86_64, macosx_13_0_*) dan penghapusan wheel Windows 32-bit.
Apa yang baru di rilis ini
- [Fitur] Menambahkan dukungan untuk mengekstrak anotasi dengan
get_annotations()danTextOptions.include_annotations(PARSERPYTHONNET-23) - [Fitur] Menambahkan alat baris perintah
groupdocs-parser(PARSERPYTHONNET-24) - [Fitur] Menambahkan dukungan untuk objek logger Python yang mengimplementasikan
ILogger(PARSERPYTHONNET-25) - [Fitur] Menambahkan dukungan untuk menangani pemuatan sumber daya eksternal dari Python (PARSERPYTHONNET-26)
- [Fitur] Menambahkan OCR untuk teks Arab dan Korea (PARSERPYTHONNET-27)
- [Fitur] Menambahkan dukungan untuk mengekstrak tabel dari dokumen HTML (PARSERPYTHONNET-28)
- [Fitur] Menambahkan dukungan untuk menerapkan lisensi dari variabel lingkungan
GROUPDOCS_LIC_PATH(PARSERPYTHONNET-36) - [Peningkatan] Memperbarui GroupDocs.Parser ke 26.8 dan runtime tersemat ke .NET 10.0.14 (PARSERPYTHONNET-29)
- [Peningkatan] Menyediakan paket pure-Python untuk Python 3.5 – 3.14 menggantikan ekstensi yang dikompilasi (PARSERPYTHONNET-30)
- [Peningkatan] Mengirim callback pratinjau ke
PreviewOptionssebagai fungsi Python biasa (PARSERPYTHONNET-31) - [Peningkatan] Menolak penetapan ke atribut tidak dikenal pada objek API (PARSERPYTHONNET-32)
- [Peningkatan] Memperbarui tag platform ke glibc 2.27 dan macOS 13, serta menghapus wheel Windows 32-bit (PARSERPYTHONNET-33)
- [Peningkatan] Menaikkan
GroupDocsParserExceptiondan subclass-nya alih-alihRuntimeError(PARSERPYTHONNET-34) - [Peningkatan] Memperbarui
System.Security.Cryptography.Pkcske 10.0.14, yang memperbaiki dua kerentanan penolakan layanan (PARSERPYTHONNET-37) - [Perbaikan] Beberapa dokumen Word dan RTF gagal dengan
The document appears to be corruptedatau assemblySkiaSharp3.119 yang hilang (PARSERPYTHONNET-35) - [Perbaikan] Memori bertambah setiap kali dokumen dibuka dari
BytesIO(PARSERPYTHONNET-38)
Perubahan API Publik
- Kesalahan mesin mengangkat
GroupDocsParserException,InvalidPasswordException,CorruptedDocumentExceptionatauUnsupportedDocumentFormatExceptiondarigroupdocs.parser.exceptions, dimana pada 25.12 semua mengangkatRuntimeError. Kelas‑kelas tersebut ada pada 25.12, tetapi tidak diturunkan dariExceptiondan tidak pernah diangkat.except Exceptionmenangkap kesalahan pada kedua rilis. - Menetapkan atribut yang tidak dikenal mengangkat
AttributeError. - Daftar yang dikembalikan mesin mendukung
len()dan pengindeksan, dan daftar kosong dianggap false.
Dihapus
groupdocs.parser.options.ICreatePageStreamgroupdocs.parser.options.IReleasePageStreamgroupdocs.parser.options.IPreviewPageRender
Gunakan fungsi untuk PreviewOptions dan PreviewOptions.preview_page_render sebagai gantinya.
Kelas dan anggota baru
groupdocs.parser:Resources.groupdocs.parser.data:AnnotationItem.groupdocs.parser.options:CreatePageStream,ReleasePageStream,PreviewPageRender,Language,PreviewFormats.Parser:get_annotations(),get_structure(),dispose().Features:annotations.TextOptions:include_annotations.OcrOptions:language.ILogger:error().TocItem:extract_text().PageTableArea:get()dantable[row, column].DocumentData,Template:get().TemplateCollection:append().Resources:storage_path, dapat ditulisi.
Fitur baru
Ekstrak anotasi
Parser.get_annotations() mengembalikan komentar dan catatan dari dokumen PDF, Word, atau PowerPoint sebagai objek AnnotationItem dengan nilai, tipe, indeks halaman, timestamp, nama penulis, dan inisial; get_annotations(page_index) membaca satu halaman. TextOptions.include_annotations menambahkan teks anotasi ke teks yang diekstrak, dan parser.features.annotations memberi tahu apakah format mendukung anotasi.
from groupdocs.parser import Parser
from groupdocs.parser.options import TextOptions
with Parser("reviewed.docx") as parser:
for note in parser.get_annotations() or []:
print(note.page_index + 1, note.annotation_type, note.author_name, note.value.strip())
options = TextOptions()
options.include_annotations = True
print(parser.get_text(options))
Baris perintah
Wheel menginstal skrip konsol groupdocs-parser (juga python -m groupdocs.parser) dengan perintah text, info, metadata, images, annotations, dan list-formats. text menerima --page N (dihitung dari 1), --format plain|markdown|html, --ocr, --include-annotations dan -o FILE; info, metadata, dan annotations menerima --json; images menerima --out DIR; setiap perintah menerima --password. --license dan --version diletakkan sebelum perintah. Kode keluar adalah 0 bila sukses, 2 untuk kesalahan pengguna seperti file yang hilang, dan 1 untuk kesalahan mesin atau format yang tidak mendukung operasi.
groupdocs-parser text report.pdf --page 2 -o page2.txt
groupdocs-parser text report.docx --format markdown
groupdocs-parser info report.pdf --json
groupdocs-parser annotations reviewed.docx --json
groupdocs-parser --license license.lic text protected.pdf --password secret
Logger Python
Objek Python biasa dengan metode trace(message), warning(message), dan error(message, exception) dapat diberikan ke ParserSettings sebagai logger, dan mesin akan memanggilnya dengan apa yang ditemui selama ekstraksi, misalnya file yang rusak. Fungsi log(level, message, exception) juga dapat digunakan.
from groupdocs.parser import Parser
from groupdocs.parser.options import ParserSettings
class PrintLogger:
def trace(self, message):
print("TRACE:", message)
def warning(self, message):
print("WARNING:", message)
def error(self, message, exception):
print("ERROR:", message, exception)
with Parser("document.pdf", ParserSettings(PrintLogger())) as parser:
print(parser.get_document_info().page_count)
Kontrol pemuatan sumber daya eksternal
Mesin meminta penangan sumber daya eksternal sebelum memuat setiap gambar yang dirujuk oleh dokumen HTML atau MHTML. Penangan dapat berupa fungsi, objek dengan metode on_loading(args), atau subclass ExternalResourceHandler; menetapkan args.skipped = True akan melewatkan sumber daya tersebut. ParserSettings menerima penangan ini sebagai external_resource_handler.
from groupdocs.parser import Parser
from groupdocs.parser.options import ParserSettings
def skip_remote(args):
args.skipped = args.uri.startswith("http")
with Parser("page.html", ParserSettings(external_resource_handler=skip_remote)) as parser:
print(len(parser.get_images() or []))
OCR untuk Bahasa Arab dan Korea
OcrOptions.language memilih alfabet yang dikenali OCR, defaultnya Bahasa Inggris. Language.ARA dan Language.KOR baru pada mesin ini. Model pengenalan merupakan bagian dari mesin: panggilan OCR pertama mengekstraknya, sekitar 80 MB, ke folder aspose_data di direktori kerja, tanpa unduhan. Untuk memilih folder, tetapkan Resources.storage_path (from groupdocs.parser import Resources) sebelum panggilan OCR pertama.
from groupdocs.parser import Parser
from groupdocs.parser.options import Language, OcrOptions, TextOptions
ocr_options = OcrOptions()
ocr_options.language = Language.KOR
with Parser("scan.jpg") as parser:
print(parser.get_text(TextOptions(False, True, ocr_options)))
Tabel dari dokumen HTML
get_tables() kini menemukan tabel pada dokumen HTML, sebagaimana pada PDF, Word, dan spreadsheet; pada 25.12 tidak ada yang ditemukan. Sel tabel diakses dengan table[row, column], atau table.get(row, column).
from groupdocs.parser import Parser
with Parser("report.html") as parser:
for table in parser.get_tables() or []:
for row in range(table.row_count):
print([table[row, column].text.rstrip("\x07") for column in range(table.column_count)])
Lisensi dari lingkungan
Setel GROUPDOCS_LIC_PATH ke jalur file lisensi, atau ke URL yang menyediakannya, dan lisensi akan diterapkan pada pemanggilan Parser pertama, tanpa kode lisensi; pada 25.12 variabel ini tidak dibaca. Jika lisensi tidak dapat diterapkan (file hilang, langganan kedaluwarsa, lisensi untuk produk lain), setiap pemanggilan Parser mengangkat 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.parser import LicenseError, Parser
try:
with Parser("report.pdf") as parser:
print(parser.get_text())
except LicenseError as e:
print(e) # GROUPDOCS_LIC_PATH=... could not be applied: <reason>
Callback pratinjau sebagai fungsi biasa
PreviewOptions(create_page_stream, release_page_stream) menerima fungsi biasa, begitu pula PreviewOptions.preview_page_render. create_page_stream(page_number) mengembalikan stream yang dapat ditulisi, misalnya file yang dibuka dengan "wb" atau io.BytesIO; halaman dinomori mulai dari 1. Mesin menutup file yang diberikan, dan memanggil release_page_stream(page_number) setelah halaman selesai ditulis. Pada 25.12 ini merupakan kelas ICreatePageStream, IReleasePageStream, dan IPreviewPageRender.
from groupdocs.parser import Parser
from groupdocs.parser.options import PreviewOptions
def create_page_stream(page_number):
return open("page-%d.png" % page_number, "wb")
def release_page_stream(page_number):
print("page", page_number, "written")
options = PreviewOptions(create_page_stream, release_page_stream)
options.preview_page_render = lambda info: print("rendering page", info.page_number)
with Parser("document.pdf") as parser:
parser.generate_preview(options)
Atribut yang salah eja menimbulkan AttributeError
Menetapkan properti yang tidak dimiliki objek API mengangkat AttributeError dengan petunjuk “Apakah maksud Anda”. Pada 25.12 penetapan diterima, disimpan sebagai atribut khusus Python, dan pengaturan mesin tidak berubah.
from groupdocs.parser.options import TextOptions
options = TextOptions()
try:
options.include_annotation = True
except AttributeError as error:
print(error)
Satu wheel untuk Python 3.5 – 3.14
Pada 25.12 terdapat ekstensi yang dikompilasi, dengan satu modul biner per versi Python dan runtime .NET Core 3.1. Versi 26.10 adalah satu wheel py3-none-<platform> per platform, Python murni di atas runtime .NET 10 yang tersemat, dan menyatakan python_requires=">=3.5,<3.15". Python 3.14 baru ditambahkan: 25.12 menyatakan <3.14. Sebagian besar kode 25.12 berjalan tanpa perubahan, dan semua 129 contoh Docs yang berjalan pada 25.12 juga berjalan pada 26.10. get_text() dan get_formatted_text() masih mengembalikan str, yang kini juga mendukung read_to_end().
Tag platform yang diperbarui dan wheel Windows 64-bit
Wheel Linux ditandai manylinux_2_27_x86_64, glibc tertua yang didukung oleh runtime .NET 10 tersemat, dan wheel macOS macosx_13_0_x86_64 serta macosx_13_0_arm64. Tidak ada lagi wheel Windows 32-bit. Instalasi memerlukan pip 20.3 atau lebih baru.
Contoh kode
Ekstrak anotasi dari dokumen Word dan sertakan dalam teks yang diekstrak:
from groupdocs.parser import Parser
from groupdocs.parser.options import TextOptions
with Parser("reviewed.docx") as parser:
for note in parser.get_annotations() or []:
print(note.page_index + 1, note.annotation_type, note.author_name, note.value.strip())
options = TextOptions()
options.include_annotations = True
print(parser.get_text(options))
Cara mendapatkan pembaruan
PyPI
Instal atau perbarui menggunakan PyPI:
groupdocs-parser-net 26.10.0 di PyPI
pip install groupdocs-parser-net==26.10.0
Unduhan langsung
Unduh wheel spesifik platform dari halaman rilis GroupDocs.Parser for Python via .NET 26.10: