我們很高興宣布 GroupDocs.Parser for Python v26.10 已於 2026 年 11 月 正式發佈。此版本將底層引擎升級至 26.8,並從 .NET Core 3.1 迁移至 .NET 10.0.14,修復了 System.Security.Cryptography.Pkcs 中的兩個拒絕服務漏洞。它引入了多項重大新功能,包括註解抽取、HTML 表格解析、阿拉伯語與韓語 OCR、Python 日誌記錄器、外部資源處理、以純函式形式的預覽回呼,以及 groupdocs-parser 命令列工具。此 wheel 現已成為純 Python 套件,支援 Python 3.5 – 3.14,平台標籤已更新為 (manylinux_2_27_x86_64, macosx_13_0_*),且移除了 32 位元 Windows wheel。
本次發佈的新增功能
- [Feature] 新增支援使用
get_annotations()與TextOptions.include_annotations抽取註解 (PARSERPYTHONNET-23) - [Feature] 新增
groupdocs-parser命令列工具 (PARSERPYTHONNET-24) - [Feature] 新增支援實作
ILogger的 Python 日誌記錄器物件 (PARSERPYTHONNET-25) - [Feature] 新增支援從 Python 處理外部資源的載入 (PARSERPYTHONNET-26)
- [Feature] 新增對阿拉伯語與韓語文字的 OCR 支援 (PARSERPYTHONNET-27)
- [Feature] 新增支援從 HTML 文件抽取表格 (PARSERPYTHONNET-28)
- [Feature] 新增支援從
GROUPDOCS_LIC_PATH環境變數載入授權 (PARSERPYTHONNET-36) - [Enhancement] 將 GroupDocs.Parser 更新至 26.8,並將嵌入式執行環境升級至 .NET 10.0.14 (PARSERPYTHONNET-29)
- [Enhancement] 以純 Python 套件取代編譯擴充套件,支援 Python 3.5 – 3.14 (PARSERPYTHONNET-30)
- [Enhancement] 允許將預覽回呼以純 Python 函式傳遞給
PreviewOptions(PARSERPYTHONNET-31) - [Enhancement] 拒絕對 API 物件未知屬性的賦值 (PARSERPYTHONNET-32)
- [Enhancement] 更新平台標籤至 glibc 2.27 與 macOS 13,並移除 32 位元 Windows wheel (PARSERPYTHONNET-33)
- [Enhancement] 改為拋出
GroupDocsParserException及其子類別,而非RuntimeError(PARSERPYTHONNET-34) - [Enhancement] 更新
System.Security.Cryptography.Pkcs至 10.0.14,修復兩個拒絕服務漏洞 (PARSERPYTHONNET-37) - [Fix] 某些 Word 與 RTF 文件會因
The document appears to be corrupted或缺少SkiaSharp3.119 程式集而失敗 (PARSERPYTHONNET-35) - [Fix] 從
BytesIO開啟每個文件時記憶體會持續增長 (PARSERPYTHONNET-38)
公開 API 變更
- 引擎錯誤現在會拋出
GroupDocsParserException、InvalidPasswordException、CorruptedDocumentException或UnsupportedDocumentFormatException(位於groupdocs.parser.exceptions),而在 25.12 版中這些錯誤皆以RuntimeError形式拋出。這些類別在 25.12 已存在,但未繼承自Exception,也從未被拋出。except Exception能同時捕獲兩個版本的錯誤。 - 為未知屬性賦值時會拋出
AttributeError。 - 引擎返回的列表支援
len()與索引存取,空列表會被視為 False。
已移除
groupdocs.parser.options.ICreatePageStreamgroupdocs.parser.options.IReleasePageStreamgroupdocs.parser.options.IPreviewPageRender
請改為將函式傳遞給 PreviewOptions 與 PreviewOptions.preview_page_render。
新增類別與成員
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()與table[row, column]。DocumentData、Template:get()。TemplateCollection:append()。Resources:storage_path(可寫入)。
新功能
抽取註解
Parser.get_annotations() 會返回 PDF、Word 或 PowerPoint 文件的評論與註記,作為 AnnotationItem 物件,包含值、類型、頁索引、時間戳、作者名稱與縮寫;get_annotations(page_index) 可僅讀取單一頁面。TextOptions.include_annotations 會將註解文字加入抽取的文字中,parser.features.annotations 則指示某格式是否支援註解。
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))
命令列
此 wheel 會安裝 groupdocs-parser 控制台腳本(亦可使用 python -m groupdocs.parser),支援 text、info、metadata、images、annotations 與 list-formats 等指令。text 支援 --page N(從 1 起算)、--format plain|markdown|html、--ocr、--include-annotations 與 -o FILE;info、metadata、annotations 支援 --json;images 支援 --out DIR;所有指令皆支援 --password。--license 與 --version 必須寫在指令之前。成功時返回代碼 0,使用者錯誤(如缺少檔案)返回 2,引擎錯誤或不支援的格式返回 1。
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
Python 日誌記錄器
只要提供具備 trace(message)、warning(message) 與 error(message, exception) 方法的純 Python 物件,即可作為 ParserSettings 的日誌記錄器;引擎在抽取過程中遇到問題(例如檔案損壞)時會呼叫它。亦可傳入 log(level, message, exception) 形式的函式。
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)
控制外部資源的載入
引擎在載入 HTML 或 MHTML 文件中每個圖片前,會先呼叫外部資源處理器。處理器可以是函式、具備 on_loading(args) 方法的物件,或 ExternalResourceHandler 的子類別;將 args.skipped = True 可跳過該資源。ParserSettings 以 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
OcrOptions.language 用於指定 OCR 要辨識的字母表,預設為英文。Language.ARA 與 Language.KOR 為本次引擎新增的選項。辨識模型內建於引擎:首次呼叫 OCR 時會解壓約 80 MB 的模型至工作目錄下的 aspose_data 資料夾,無需下載。若要自訂資料夾,可在首次 OCR 呼叫前設定 Resources.storage_path(from groupdocs.parser import Resources)。
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)))
從 HTML 文件抽取表格
get_tables() 現已支援抽取 HTML 文件中的表格,與 PDF、Word、試算表文件的行為相同;在 25.12 版中未能找到任何表格。單元格可透過 table[row, column] 或 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)])
從環境變數載入授權
將 GROUPDOCS_LIC_PATH 設為授權檔案的路徑,或指向提供授權檔的 URL,則在第一次建立 Parser 時自動套用授權,無需額外授權碼;25.12 版未讀取此變數。若授權無法套用(檔案遺失、訂閱過期、授權屬於其他產品),每次呼叫 Parser 都會拋出 LicenseError,說明變數名稱與引擎的失敗原因,直到使用 License().set_license() 成功套用授權。將 GROUPDOCS_LIC_STRICT=0 可改為僅拋出一次 LicenseWarning 並進入評估模式。
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>
預覽回呼以純函式形式
PreviewOptions(create_page_stream, release_page_stream) 接受普通函式,PreviewOptions.preview_page_render 亦同。create_page_stream(page_number) 必須回傳可寫入的串流,例如以 "wb" 開啟的檔案或 io.BytesIO;頁碼從 1 開始。引擎會在寫入完成後關閉傳入的檔案,並呼叫 release_page_stream(page_number)。在 25.12 版中,這些功能分別由 ICreatePageStream、IReleasePageStream 與 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)
拼寫錯誤的屬性會拋出 AttributeError
對 API 物件不存在的屬性賦值時,會拋出帶有「Did you mean」提示的 AttributeError。在 25.12 版中,這類賦值會被接受,僅在 Python 層面儲存一個屬性,且不會影響引擎設定。
from groupdocs.parser.options import TextOptions
options = TextOptions()
try:
options.include_annotation = True
except AttributeError as error:
print(error)
單一 wheel 支援 Python 3.5 – 3.14
25.12 為編譯擴充套件,每個 Python 版本都有一個二進位模組,且使用 .NET Core 3.1 執行環境。26.10 改為每平台僅提供一個 py3-none-<platform> wheel,純 Python 之上嵌入 .NET 10 執行環境,並宣告 python_requires=">=3.5,<3.15"。Python 3.14 為新加入的支援版本;25.12 僅支援 <3.14。大多數 25.12 的程式碼可直接執行,所有 129 個在 25.12 上可運行的 Docs 範例亦能在 26.10 上執行。get_text() 與 get_formatted_text() 仍回傳 str,現在也支援 read_to_end()。
更新平台標籤與 64 位元 Windows wheel
Linux wheel 標籤為 manylinux_2_27_x86_64(嵌入式 .NET 10 執行環境支援的最舊 glibc 版本),macOS wheel 為 macosx_13_0_x86_64 與 macosx_13_0_arm64。已不再提供 32 位元 Windows wheel。安裝時需使用 pip 20.3 或更新版本。
程式碼範例
從 Word 文件抽取註解並將其納入抽取的文字中:
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))
如何取得更新
PyPI
使用 PyPI 安裝或升級:
groupdocs-parser-net 26.10.0 on PyPI
pip install groupdocs-parser-net==26.10.0
直接下載
從 GroupDocs.Parser for Python via .NET 26.10 釋出頁面下載各平台專屬的 wheel: