共同作業:DisplayList と TextPage#

これらのクラスを一緒に使用する方法に関するいくつかの手順があります。

一部の状況では、ここで説明されている詳細レベルに戻ると、パフォーマンスの向上が可能かもしれません。

DisplayList の作成#

DisplayList(ディスプレイリスト) は解釈された文書ページを表します。ピクセルマップの作成、テキスト抽出、およびテキスト検索のメソッドは、幕の内側で、それぞれのタスクを実行するためにページの表示リストを使用しています。ページを複数回描画する必要がある場合(ズームレベルが変更されたためなど)、またはテキストの検索とテキストの抽出の両方を実行する必要がある場合、表示リストは一度だけ作成し、その後のすべてのタスクに使用すると、オーバーヘッドを節約できます。

>>> dl = page.get_displaylist()              # create the display list

ディスプレイリストを多くのページに対して「スタック上」(リスト内)で作成することもできます。これはドキュメントを開いている間、アイドリング時間中、またはページが初めて訪れられたとき(GUIスクリプトなど)に行うことができます。

注意:以下のすべてのことについて、ディスプレイリストのみが必要です - 対応する Page (ページ) オブジェクトは削除されている可能性があります。

ピクセルマップの生成#

以下は、DisplayList(ディスプレイリスト) からピクセルマップを生成するものです。パラメータは Page.get_pixmap() と同じです。

>>> pix = dl.get_pixmap()                    # create the page's pixmap

この文の実行時間は、Page.get_pixmap() の実行時間よりも最大50%短くなる可能性があります。

テキストの抽出#

前述の TextPage (テキストページ) オブジェクトを使用することで、今すぐに5つのテキスト抽出メソッドのいずれかまたはすべてを使用できます。

注釈

前述のように、テキストページを引数なしで作成しました。これにより、デフォルトの引数3(合字と空白が保持されます)が適用されます。つまり、画像は抽出 されません - 以下を参照してください。

>>> txt  = tp.extractText()                  # plain text format
>>> json = tp.extractJSON()                  # json format
>>> html = tp.extractHTML()                  # HTML format
>>> xml  = tp.extractXML()                   # XML format
>>> xml  = tp.extractXHTML()                 # XHTML format

さらなるパフォーマンスの向上#

Pixmap#

ページの章で説明されているように:

透明度が不要な場合は、ピクスマップを作成する際に alpha = 0 に設定します。これにより、メモリが25%節約されます(RGBの場合、最も一般的なケース)し、GUIソフトウェアに依存して実行時間が5%削減される可能性があります。

TextPage#

ページのテキストと一緒に画像を抽出する必要がない場合、以下のオプションを設定できます:

>>> flags = pymupdf.TEXT_PRESERVE_LIGATURES | pymupdf.TEXT_PRESERVE_WHITESPACE
>>> tp = dl.get_textpage(flags)

これにより、HTML、XHTML、およびJSONのテキスト抽出全体の実行時間が約25%節約され、ドキュメントがグラフィックス志向である場合、ストレージ(メモリとディスクスペースの両方)の量が 大幅に 削減されます。

ただし、画像が必要な場合は、フラグに7の値を使用してください:

>>> flags = pymupdf.TEXT_PRESERVE_LIGATURES | pymupdf.TEXT_PRESERVE_WHITESPACE | pymupdf.TEXT_PRESERVE_IMAGES

This software is provided AS-IS with no warranty, either express or implied. This software is distributed under license and may not be copied, modified or distributed except as expressly authorized under the terms of that license. Refer to licensing information at artifex.com or contact Artifex Software Inc., 39 Mesa Street, Suite 108A, San Francisco CA 94129, United States for further information.

Discord logo