私たちは、GroupDocs.Parser for Python v26.10 のリリースを発表できることを嬉しく思います。リリース日は 2026年11月 です。このリリースでは、基盤エンジンをバージョン 26.8 にアップグレードし、.NET Core 3.1 から .NET 10.0.14 に移行し、System.Security.Cryptography.Pkcs の 2 つのサービス拒否脆弱性を修正しました。主な新機能として、アノテーション抽出、HTML テーブル解析、アラビア語と韓国語の OCR、Python ロガー、外部リソースの処理、プレビューコールバックをプレーン関数として使用、そして groupdocs-parser コマンドラインツールが追加されています。wheel は純粋な Python パッケージとなり、Python 3.5 – 3.14 を対象とし、プラットフォームタグが更新され(manylinux_2_27_x86_64、macosx_13_0_*)、32 ビット Windows の wheel が削除されました。
このリリースの新機能
- [機能]
get_annotations()とTextOptions.include_annotationsによるアノテーション抽出のサポートを追加 (PARSERPYTHONNET-23) - [機能]
groupdocs-parserコマンドラインツールの追加 (PARSERPYTHONNET-24) - [機能]
ILoggerを実装した Python ロガーオブジェクトのサポートを追加 (PARSERPYTHONNET-25) - [機能] Python から外部リソースのロード処理をハンドリングするサポートを追加 (PARSERPYTHONNET-26)
- [機能] アラビア語と韓国語テキストの OCR を追加 (PARSERPYTHONNET-27)
- [機能] HTML ドキュメントからのテーブル抽出サポートを追加 (PARSERPYTHONNET-28)
- [機能]
GROUPDOCS_LIC_PATH環境変数からライセンスを適用するサポートを追加 (PARSERPYTHONNET-36) - [強化] GroupDocs.Parser を 26.8 に、埋め込みランタイムを .NET 10.0.14 に更新 (PARSERPYTHONNET-29)
- [強化] コンパイル済み拡張モジュールの代わりに、Python 3.5 – 3.14 用の純粋な Python パッケージを提供 (PARSERPYTHONNET-30)
- [強化]
PreviewOptionsへプレビューコールバックをプレーンな Python 関数として渡すように変更 (PARSERPYTHONNET-31) - [強化] API オブジェクトの未知の属性への代入を拒否 (PARSERPYTHONNET-32)
- [強化] プラットフォームタグを glibc 2.27 と macOS 13 に更新し、32 ビット Windows の wheel を削除 (PARSERPYTHONNET-33)
- [強化]
RuntimeErrorの代わりにGroupDocsParserExceptionとそのサブクラスをスロー (PARSERPYTHONNET-34) - [強化]
System.Security.Cryptography.Pkcsを 10.0.14 に更新し、2 つのサービス拒否脆弱性を修正 (PARSERPYTHONNET-37) - [修正] 一部の Word および RTF ドキュメントで
The document appears to be corruptedエラーやSkiaSharp3.119 アセンブリが欠如している問題を修正 (PARSERPYTHONNET-35) - [修正]
BytesIOから開くたびにメモリが増加する問題を修正 (PARSERPYTHONNET-38)
パブリック API の変更
- エンジンエラーは
groupdocs.parser.exceptionsからGroupDocsParserException、InvalidPasswordException、CorruptedDocumentException、UnsupportedDocumentFormatExceptionをスローします。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, writable.
新機能
アノテーションの抽出
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 では HTML のテーブルは取得できませんでした。セルは 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 ではこの変数は読み取られませんでした。ライセンスが適用できない場合(ファイル欠如、期限切れ、別製品用ライセンスなど)は、LicenseError がスローされ、変数名とエンジン側の理由が示されます。License().set_license() でライセンスを設定すればエラーは解消します。GROUPDOCS_LIC_STRICT=0 とすると、1 件の 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 オブジェクトに存在しないプロパティに代入しようとすると、AttributeError がスローされ、“Did you mean” ヒントが表示されます。25.12 では代入が受け入れられ、Python 専用属性として保存され、エンジン設定は変更されませんでした。
from groupdocs.parser.options import TextOptions
options = TextOptions()
try:
options.include_annotation = True
except AttributeError as error:
print(error)
Python 3.5 – 3.14 用の単一 wheel
25.12 はコンパイル済み拡張モジュールで、Python バージョンごとにバイナリモジュールが1つずつ、.NET Core 3.1 ランタイムが必要でした。26.10 はプラットフォームごとに py3-none-<platform> の単一 wheel で、埋め込み .NET 10 ランタイム上の純粋な Python です。python_requires=">=3.5,<3.15" を宣言し、Python 3.14 も対象に加えました(25.12 は <3.14)。ほとんどの 25.12 コードはそのまま動作し、129 件の 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 を使用してインストールまたはアップグレードします:
PyPI の groupdocs-parser-net 26.10.0
pip install groupdocs-parser-net==26.10.0
直接ダウンロード
GroupDocs.Parser for Python via .NET 26.10 のリリースページからプラットフォーム別の wheel をダウンロードしてください: