関数#

以下は、PDFに関する低レベルな技術的詳細に関するさまざまな関数と属性です。

一部の関数は、PDF構造への詳細なアクセスを提供します。他の関数の高性能バージョンで、より多くの情報を提供する関数から派生しています。

また、その他にも便利な汎用ユーティリティが含まれています。

関数

短い説明

Annot.apn_bbox

PDFのみ:外観オブジェクトのバウンディングボックス

Annot.apn_matrix

PDFのみ:外観オブジェクトの行列

Page.is_wrapped

コンテンツの折り返しが存在するかどうかを確認します

adobe_glyph_names()

Adobe Glyph List で定義されたグリフ名のリスト

adobe_glyph_unicodes()

Adobe Glyph List で定義されたUnicodeのリスト

Annot.clean_contents()

PDFのみ:アノテーションの contents オブジェクトをクリーンアップ

Annot.set_apn_bbox()

PDFのみ:外観オブジェクトのバウンディングボックスを設定

Annot.set_apn_matrix()

PDFのみ:外観オブジェクトの行列を設定

ConversionHeader()

get_text メソッド用のヘッダー文字列を返す

ConversionTrailer()

get_text メソッド用のトレーラー文字列を返す

Document.del_xml_metadata()

PDFのみ:XMLメタデータを削除

Document.get_char_widths()

PDFのみ:フォントのグリフ幅のリストを返す

Document.get_new_xref()

PDFのみ:新しい xref エントリを作成して返す

Document.is_stream()

PDFのみ:xref がストリームオブジェクトであるかどうかを確認

Document.xml_metadata_xref()

PDFのみ:XMLメタデータの xref 番号を返す

Document.xref_length()

PDFのみ:xref テーブルの長さを返す

EMPTY_IRECT()

標準の空の/無効な矩形を返す

EMPTY_QUAD()

標準の空の/無効な四角形を返す

EMPTY_RECT()

標準の空の/無効な矩形を返す

get_pdf_now()

現在のタイムスタンプをPDF形式で返す

get_pdf_str()

PDF互換の文字列を返す

get_text_length()

指定したフォントと fontsize の文字列長を返す

glyph_name_to_unicode()

グリフ名からUnicodeを返す

image_profile()

基本的な画像プロパティの辞書を返します。

INFINITE_IRECT()

(唯一存在する)無限の矩形を返します。

INFINITE_QUAD()

(唯一存在する)無限のクワッドを返します。

INFINITE_RECT()

(唯一存在する)無限の矩形を返します。

make_table()

矩形をサブ矩形に分割します。

Page.clean_contents()

PDF のみ:ページの contents オブジェクトをクリーンアップします

Page.get_bboxlog()

テキスト、描画、または画像オブジェクトを囲む矩形のリストです。

Page.get_contents()

PDF のみ:コンテンツ xref 番号のリストを返します。

Page.get_displaylist()

ページの表示リストを作成します。

Page.get_text_blocks()

テキスト ブロックを Python リストとして抽出します。

Page.get_text_words()

テキストワードを Python リストとして抽出します。

Page.get_texttrace()

低レベルのテキスト情報です。

Page.read_contents()

PDF のみ:完全な連結 /Contents ソースを取得します。

Page.run()

ページをデバイスを介して実行します。

Page.set_contents()

PDF のみ:ページの contents を特定の xref に設定します。

Page.wrap_contents()

スタッキング コマンドでコンテンツをラップします。

css_for_pymupdf_font()

パッケージ pymupdf_fonts のフォント用の CSS ソースを作成します。

paper_rect()

既知の用紙形式の矩形を返します。

paper_size()

既知の用紙形式の幅と高さを返します。

paper_sizes()

事前定義の用紙形式の辞書です。

planish_line()

直線を x 軸にマップする行列です。

recover_char_quad()

文字のクワッドを計算します("rawdict")。

recover_line_quad()

ラインスパンのサブセットのクワッドを計算します

recover_quad()

スパンのクワッドを計算する ("dict", "rawdict")

recover_span_quad()

行スパンのサブセットのクワッドを計算します。

sRGB_to_pdf()

sRGB 整数から PDF RGB カラー タプルを返します。

sRGB_to_rgb()

sRGB 整数から (R、G、B) カラー タプルを返します。

unicode_to_glyph_name()

Unicode からグリフ名を返します。

get_tessdata()

Tesseract-OCR インストールの言語サポートを特定します。

fitz_fontdescriptors

利用可能な補足フォントの辞書です。

TESSDATA_PREFIX

os.environ["TESSDATA_PREFIX"] のコピーです

pdfcolor

PDF 形式のほぼ 500 以上の RGB カラーの辞書です。

paper_size(s)#

既知の用紙フォーマットの幅と高さを返す便利な関数です。これらの値は、標準解像度 72 ピクセル = 1 インチのピクセル単位で指定されます。

現在の定義されたフォーマットには、‘A0’ から ‘A10’‘B0’ から ‘B10’‘C0’ から ‘C10’‘Card-4x6’‘Card-5x7’‘Commercial’‘Executive’‘Invoice’‘Ledger’‘Legal’‘Legal-13’‘Letter’‘Monarch’‘Tabloid-Extra’ が含まれており、各フォーマットは縦向きまたは横向きで提供されています。

フォーマット名は、文字列として指定する必要があります(大文字小文字を区別しない)。オプションで " -L"(横向き)または " -P"(縦向き)でサフィックスを付けることができます。サフィックスが指定されていない場合、デフォルトは縦向きです。

パラメータ:

s (str) -- 上記のいずれかのフォーマット名を大文字または小文字で指定します。たとえば、"A4" または "letter-l" のように指定します。

戻り値の型:

tuple

戻り値:

用紙フォーマットの (幅、高さ)。不明なフォーマットの場合、(-1、-1) が返されます。例:pymupdf.paper_size("A4") は (595、842) を返し、pymupdf.paper_size("letter-l")(792、612) を返します。


paper_rect(s)#

既知の紙のフォーマットに対応する Rect (矩形) を返す便益関数です。

パラメータ:

s (str) -- paper_size() でサポートされている任意のフォーマット名。

戻り値の型:

Rect (矩形)

戻り値:

pymupdf.Rect(0, 0, width, height) with width, height=pymupdf.paper_size(s).

>>> import pymupdf
>>> pymupdf.paper_rect("letter-l")
pymupdf.Rect(0.0, 0.0, 792.0, 612.0)
>>>

sRGB_to_pdf(srgb)#

バージョン1.17.4で新たに追加

Page.get_text() の辞書 "dict" および "rawdict" に存在する与えられた sRGB カラー整数に対して、PDF カラーのトリプル(赤、緑、青)を返す便益関数です。

パラメータ:

srgb (int) -- 各カラーコンポーネントが範囲[0, 255]の整数である RRGGBB 形式の整数。

戻り値:

0 <= item <= 1 の間の浮動小数点数アイテムを持つタプル(赤、緑、青)で、同じカラーを表します。例:sRGB_to_pdf(0xff0000) = (1, 0, 0) (赤)。


sRGB_to_rgb(srgb)#

バージョン1.17.4で新たに追加

与えられた sRGB カラー整数に対して、カラー(赤、緑、青)を返す便益関数です。

パラメータ:

srgb (int) -- 各カラーコンポーネントが範囲[0, 255]の整数である RRGGBB 形式の整数。

戻り値:

整数アイテムが range(256) の範囲にある、同じ色を表すタプル(赤、緑、青)。例: sRGB_to_pdf(0xff0000) = (255, 0, 0) (赤)


glyph_name_to_unicode(name)#

バージョン1.18.0で新たに追加

Adobe Glyph List に基づくグリフ名のUnicode番号を返す関数です。

パラメータ:

name (str) -- グリフの名前。この関数は Adobe Glyph List に基づいています。

戻り値の型:

int

戻り値:

Unicode番号。無効な name のエントリは 0xfffd (65533) を返します。

注釈

同様の機能は、fontTools パッケージの agl サブパッケージで提供されています。


unicode_to_glyph_name(ch)#

バージョン1.18.0で新たに追加

以下は、Adobe Glyph List に基づいた、Unicode番号に基づいたグリフ名を返す関数です。

パラメータ:

ch (int) -- Unicode番号、例:ord("ß") によって与えられます。この関数は Adobe Glyph List に基づいています。

戻り値の型:

str

戻り値:

グリフ名、例:pymupdf.unicode_to_glyph_name(ord("Ä"))'Adieresis' を返します。

注釈

類似の機能は、fontTools パッケージの agl サブパッケージで提供されています。


adobe_glyph_names()#

バージョン1.18.0で新たに追加

Adobe Glyph List で定義されたグリフ名のリストを返します。

戻り値の型:

list

戻り値:

文字列のリスト。

注釈

同様の機能は、fontTools パッケージの agl サブパッケージで提供されています。


adobe_glyph_unicodes()#

バージョン1.18.0で新たに追加

Adobe Glyph List にグリフ名が存在するUnicodeのリストを返します。

戻り値の型:

list

戻り値:

整数のリスト。

注釈

同様の機能は、fontTools パッケージの agl サブパッケージで提供されています。


css_for_pymupdf_font(fontcode, *, CSS=None, archive=None, name=None)#

新機能 v1.21.0

"Story" アプリケーションで使用するためのユーティリティ関数。

指定された "fontcode" に対して CSS @font-face アイテムを作成します。文字列 "fontcode" で始まるすべてのフォント用に CSS font-family を作成します。

パッケージ pymupdf-fonts でのフォントの命名規則は "fontcode<sf>" で、サフィックス "sf" は(空白)、"it"、"i"、"bo"、"b"、"bi" のいずれかです。したがって、これらのサフィックスは、フォントの通常の、イタリックの、太字の、太字イタリックのバリアントを表します。

例えば、フォントコード "notos" は以下のフォントに対応します。

  • "notos" - "Noto Sans Regular"

  • "notosit" - "Noto Sans Italic"

  • "notosbo" - "Noto Sans Bold"

  • "notosbi" - "Noto Sans Bold Italic"

この関数は(最大で)4つの CSS @font-face 定義を作成し、それらに font-family 名 "notos"(または指定された "name" の値)を割り当てます。関連するフォントバッファは提供されたアーカイブに配置されます/追加されます。

Story (ストーリー) の Python API でフォントを使用するには、`.set_font(fontcode)`(または指定した場合は "name")を実行します。必要に応じて正しいフォントウェイトまたはスタイルが自動的に選択されます。

たとえば、上記の "notos" で "sans-serif" HTML 標準(Helvetica)を置き換えるには、次のように実行します。"sans-serif" が使用される場合(明示的にまたは暗黙的に)、Noto Sans フォントが選択されます。

CSS = pymupdf.css_for_pymupdf_font("notos", name="sans-serif", archive=...)

CSS ソースが期待されており、新しい CSS 定義が追加されています。

パラメータ:
  • fontcode (str) -- pymupdf-fonts パッケージに存在するフォントファミリーの通常バージョンを表す、フォントコード。

  • CSS (str) -- 既存の CSS ソース、または None。新しい定義はこれに追加されます。これは Story (ストーリー) を作成する際に user_css として 使用する必要がある 文字列です。

  • archive -- Archive (アーカイブ)必須 です。"fontcode" に対して見つかるすべてのフォントバイナリ(最大で4つ)がアーカイブに追加されます。これは Story (ストーリー) を作成する際に Archive (アーカイブ) として**使用する必要があります** 。

  • name (str) -- "fontcode" フォントが見つかる名前。省略した場合、"fontcode" が使用されます。

戻り値の型:

str

戻り値:

変更された CSS。"fontcode" の各フォントバリアントに対して追加された @font-face ステートメントを含みます。関連する pymupdf-fonts のフォントバッファが 'archive' に追加されます。関数は最大で 4 つのフォントバリアントを自動的に見つけます。現在利用可能なフォントコードを確認するには、pymupdf.fitz_fontdescriptors.keys() を使用します。これにより、dict_keys(['cascadia', 'cascadiai', 'cascadiab', 'cascadiabi', 'figbo', 'figo', 'figbi', 'figit', 'fimbo', 'fimo', 'spacembo', 'spacembi', 'spacemit', 'spacemo', 'math', 'music', 'symbol1', 'symbol2', 'notosbo', 'notosbi', 'notosit', 'notos', 'ubuntu', 'ubuntubo', 'ubuntubi', 'ubuntuit', 'ubuntm', 'ubuntmbo', 'ubuntmbi', 'ubuntmit']) のようなものが表示されます。

以下は "Helvetica" の代わりに "Noto Sans" フォントを使用する完全なスニペットです:

arch = pymupdf.Archive()
CSS = pymupdf.css_for_pymupdf_font("notos", name="sans-serif", archive=arch)
story = pymupdf.Story(user_css=CSS, archive=arch)

make_table(rect, cols=1, rows=1)#

バージョン1.17.4で新たに追加

Convenience function to split a rectangle into sub-rectangles of equal size. Returns a list of rows lists, each containing cols Rect (矩形) items. Each sub-rectangle can then be addressed by its row and column index.

パラメータ:
  • rect (rect_like) -- 分割する矩形。

  • cols (int) -- 列の数。

  • rows (int) -- 行の数。

戻り値:

等しいサイズの Rect (矩形) オブジェクトのリストで、それらの合併は元の rect と同じです。たとえば、cell = pymupdf.make_table(rect, cols=4, rows=3) によって作成された 3x4 のテーブルのレイアウトは次のようになります:

_images/img-make-table.jpg

planish_line(p1, p2)#
  • バージョン1.16.2で新たに導入されました。

p1からp2への直線をx軸にマッピングする行列を返します。その際、p1は(0,0)になり、p2は(0,0)から同じ距離に配置されるように変換されます。

パラメータ:
  • p1 (point_like) -- 直線の始点。

  • p2 (point_like) -- 直線の終点。

戻り値の型:

Matrix (マトリックス)

戻り値:

回転と平行移動を組み合わせた行列:

>>> p1 = pymupdf.Point(1, 1)
>>> p2 = pymupdf.Point(4, 5)
>>> abs(p2 - p1)  # distance of points
5.0
>>> m = pymupdf.planish_line(p1, p2)
>>> p1 * m
Point(0.0, 0.0)
>>> p2 * m
Point(5.0, -5.960464477539063e-08)
>>> # distance of the resulting points
>>> abs(p2 * m - p1 * m)
5.0
_images/img-planish.png


paper_sizes()#

あらかじめ定義された用紙フォーマットの辞書。paper_size() の基盤として使用されます。


fitz_fontdescriptors#
  • バージョン1.17.5で新たに導入されました

pymupdf-fonts リポジトリから使用可能なフォントの辞書。アイテムは予約されたフォント名でキー付けされ、以下のような情報を提供します:

In [2]: pymupdf.fitz_fontdescriptors.keys()
Out[2]: dict_keys(['figbo', 'figo', 'figbi', 'figit', 'fimbo', 'fimo',
'spacembo', 'spacembi', 'spacemit', 'spacemo', 'math', 'music', 'symbol1',
'symbol2'])
In [3]: pymupdf.fitz_fontdescriptors["fimo"]
Out[3]:
{'name': 'Fira Mono Regular',
'size': 125712,
'mono': True,
'bold': False,
'italic': False,
'serif': True,
'glyphs': 1485}

pymupdf-fonts がインストールされていない場合、この辞書は空です。

辞書のキーは、例えば font = pymupdf.Font("fimo") のように使用してフォントを定義できます。これは、組み込みのフォント "Helvetica" やその他のフォントと同様に行うことができます。


TESSDATA_PREFIX#
  • バージョン1.19.4で新たに導入されました

便利なチェックに使用される os.environ["TESSDATA_PREFIX"] のコピー

この属性が None の場合、Tesseract-OCRはインストールされていないか、環境変数がTesseractの言語サポートフォルダを指すように設定されていない可能性があります。

注釈

この変数は、OCR関数が試行される前に確認されます。これにより、MuPDFから冗長なメッセージが表示されるのを防ぎます。


pdfcolor#
  • バージョン1.19.6で新たに導入されました

PDF形式の約500個のRGB色が、色の名前をキーとして含まれています。中身を確認するには、pymupdf.pdfcolor.keys() を見ることができます。

例:

  • pymupdf.pdfcolor["red"] = (1.0, 0.0, 0.0)

  • pymupdf.pdfcolor["skyblue"] = (0.5294117647058824, 0.807843137254902, 0.9215686274509803)

  • pymupdf.pdfcolor["wheat"] = (0.9607843137254902, 0.8705882352941177, 0.7019607843137254)


get_pdf_now()#

PDF互換の形式で現在のローカルタイムスタンプを返す便利な関数です。例: ローカルの日付と時刻が2017年5月1日12時15分25秒で、UTC子午線の西4時間のタイムゾーンにある場合、D:20170501121525-04’00’ となります。

戻り値の型:

str

戻り値:

現在のローカルPDFタイムスタンプ。


get_text_length(text, fontname='helv', fontsize=11, encoding=TEXT_ENCODING_LATIN)#
  • バージョン1.14.7で新規追加

指定された 組み込み フォント、fontsize 、およびエンコーディングで出力されるテキストの長さを計算します。

パラメータ:
  • text (str) -- テキスト文字列。

  • fontname (str) -- フォント名。PDFベース14フォント またはCJKフォントのいずれかでなければなりません。これらは「予約済み」フォント名で識別されます(Page.insert_font() のテーブルを参照)。

  • fontsize (float) -- fontsize

  • encoding (int) -- 使用するエンコーディング。0 = ラテン、1 = ギリシャ、2 = キリル文字(ロシア語)が利用可能です。ベース14フォント「Helvetica」、「Courier」、「Times」とそのバリアントにのみ関連します。対応するテキスト挿入で使用する値と同じ値を使用してください。

戻り値の型:

float

戻り値:

文字列が持つポイント単位の長さ(たとえば、Page.insert_text() で使用する場合)。

注釈

この関数は計算のみを行います - フォントまたはテキストを挿入しません。

注釈

Font (フォント) クラスは、Base-14フォントおよび文字マップ(CMap、Type 0フォントをサポートする任意のフォントに対応した似たようなメソッド Font.text_length() を提供しています。

警告

この関数を使用して(Page (ページ) または Shape(シェイプ))*insert_textbox* メソッドの必要な矩形の幅を決定する場合、文字単位で 計算されることに注意してください。丸め効果のため、これはほとんどの場合、やや大きな数になります:sum([pymupdf.get_text_length(c) for c in text]) > pymupdf.get_text_length(text)。したがって、(1)同じことを行うか、(2)計算に pymupdf.get_text_length(text + "’") のようなものを使用してください。


get_pdf_str(text)#

PDF互換の文字列を作成します。テキストに含まれる文字のコードポイントが ord(c) > 255 の場合、それはUTF-16BEに変換され、BOMが含まれた16進数の文字列で "<>" ブラケットで囲まれます。それ以外の場合は、ASCII範囲外の文字を特別なコードで置き換えて、(丸い)カッコで囲まれた文字列が返されます。また、すべての "(", ")", またはバックスラッシュはバックスラッシュでエスケープされます。

パラメータ:

text (str) -- 変換するオブジェクト

戻り値の型:

str

戻り値:

() または <> で囲まれたPDF互換の文字列。


image_profile(stream)#
  • バージョン1.16.7で新規追加

  • バージョン1.19.5で変更:EXIFデータから抽出した自然な画像の向きも返すように変更されました。

  • バージョン1.22.5で変更:エラーケースで空の辞書ではなく、常に None を返すように変更されました。

メモリ領域として提供される画像の重要なプロパティを表示します。主な目的は、これらのプロパティを決定するために他のPythonパッケージを使用しないようにすることです。

パラメータ:

stream (bytes|bytearray|BytesIO|file) -- メモリ内の画像または 開いた ファイル。メモリ内の画像は、bytesbytearray、または io.BytesIO 形式のいずれかです。

戻り値の型:

dict

戻り値:

例外は発生しません。エラーの場合、None が返されます。それ以外の場合、以下のアイテムがあります:

In [2]: pymupdf.image_profile(open("nur-ruhig.jpg", "rb").read())
Out[2]:
{'width': 439,
'height': 501,
'orientation': 0,  # natural orientation (from EXIF)
'transform': (1.0, 0.0, 0.0, 1.0, 0.0, 0.0),  # orientation matrix
'xres': 96,
'yres': 96,
'colorspace': 3,
'bpc': 8,
'ext': 'jpeg',
'cs-name': 'DeviceRGB'}

以下は、Exif 情報にエンコードされた`orientation` と、対応する transform マトリックスの関係です(MuPDFドキュメンテーションから引用、ccw = 反時計回り):

  1. 未定義

  2. 0度の反時計回りの回転(Exif = 1)

  3. 90度の反時計回りの回転(Exif = 8)

  4. 180度の反時計回りの回転(Exif = 3)

  5. 270度の反時計回りの回転(Exif = 6)

  6. X軸で反転(Exif = 2)

  7. X軸で反転し、さらに90度反時計回りに回転(Exif = 5)

  8. X軸で反転し、さらに180度反時計回りに回転(Exif = 4)

  9. X軸で反転し、さらに270度反時計回りに回転(Exif = 7)

注釈

  • 一部の「エキゾチック」な画像(FAXエンコーディング、RAWフォーマットなど)では、この方法は機能しない場合があります。ただし、PyMuPDFでは引き続きこのような画像を使用できます。たとえば、Document.extract_image() を使用したり、Pixmap(doc, xref) を介してピクマップを作成したりできます。これらのメソッドは、結果を返す前にエキゾチックな画像を自動的にPNG形式に変換します。

  • また、PDFに埋め込まれた画像のプロパティをxrefを介して取得することもできます。この場合は生のストリームを抽出してください: pymupdf.image_profile(doc.xref_stream_raw(xref))

  • Page.get_text() の画像ブロックが「dict」または「rawdict」オプションを使用して返す画像もサポートされています。


ConversionHeader("text", filename="UNKNOWN")#

ページのテキスト出力を有効なドキュメントに変換するために必要なヘッダー文字列を返します。

パラメータ:
  • output (str) -- ドキュメントの種類。get_text() メソッドのoutputパラメータと同じものを使用します。

  • filename (str) -- 出力タイプ "json" および "xml" で使用するオプションの任意の名前。

戻り値の型:

str


ConversionTrailer(output)#

Page.get_text() の例を参照して、ページテキストの出力から有効な文書を作成するために必要なトレーラー文字列を返します。

パラメータ:

output (str) -- ドキュメントの種類。get_text() メソッドのoutputパラメータと同じものを使用します。

戻り値の型:

str


Document.del_xml_metadata()#

PDF内からXMLベースのメタデータを含むオブジェクトを削除します。PyMuPDFではXMLベースのメタデータはサポートされていません。従って、従来のメタデータ辞書が排他的に使用されることを確認したい場合に使用します。多くのサードパーティのPDFプログラムは、独自のXML形式でメタデータを挿入し、従来の辞書に保存されている内容を上書きする可能性があります。このメソッドはそのような参照を削除し、ファイルの次回のガベージコレクション時に対応するPDFオブジェクトが削除されます。


Document.xml_metadata_xref()#

PDFのXMLベースのメタデータの xref を返します。存在する場合は、Document.del_xml_metadata() にも言及してください。これを使用して、Document.xref_stream() を介してコンテンツを取得し、それをいくつかのXMLソフトウェアを使用して操作できます。

戻り値の型:

int

戻り値:

PDFファイルレベルのXMLメタデータの xref。存在しない場合は0。


Page.run(dev, transform)#

ページをデバイスを通じて実行します。

パラメータ:

Page.get_bboxlog(layers=False)#
  • 新機能 v1.19.0

  • v1.22.0 で変更: 境界ボックスに適用される OCG 名もオプションで返すように変更されました。

戻り値:

テキスト、画像、または描画オブジェクトを囲む矩形のリスト。各アイテムはタプル (type, (x0, y0, x1, y1)) で、第2のタプルは矩形の座標を表し、type は以下の値のいずれかです。layers=True の場合、OCG 名または None を含む第3のアイテムがあります: (type, (x0, y0, x1, y1), None)

  • "fill-text" – 通常のテキスト(文字の境界線なしで描画)

  • "stroke-text" – 文字の境界線のみを表示するテキスト

  • "ignore-text" – 表示されないべきテキスト(OCR テキストレイヤーなどで使用されます)

  • "fill-path" – 塗りつぶしカラーで描画(境界線なし)

  • "stroke-path" – 境界線で描画(塗りつぶしカラーなし)

  • "fill-image" – 画像を表示

  • "fill-shade" – シェーディングを表示

アイテムのシーケンスは、ページの外観を構築するためにこれらのコマンドが実行される 順序を表します。したがって、アイテムの bbox が前のアイテムの bbox と交差または包含されている場合、前のアイテムは(部分的に)カバー / 隠される可能性があります。

したがって、このリストを使用してそのような状況を検出できます。このリスト内のアイテムのインデックスは、Page.get_drawings() および Page.get_texttrace() によって返される辞書の "seqno" の値と等しいです。


Page.get_texttrace()#
  • v1.18.16 で新機能

  • v1.19.0 で変更: キー "seqno" を追加。

  • v1.19.1 で変更: ストロークと塗りつぶしのカラーは常に RGB または GRAY です

  • v1.19.3 で変更: dir != (1, 0) の場合、スパンと文字の bbox も正確になりました。

  • v1.22.0 で変更: 新しい辞書キー "layer" を追加。

ページの低レベルなテキスト情報を返します。このメソッドは すべて のドキュメントタイプで利用可能です。結果は、以下の内容を持つ Python 辞書のリストです。

{
   'ascender': 0.83251953125,          # font ascender (1)
   'bbox': (458.14019775390625,        # span bbox x0 (7)
            749.4671630859375,         # span bbox y0
            467.76458740234375,        # span bbox x1
            757.5071411132812),        # span bbox y1
   'bidi': 0,                          # bidirectional level (1)
   'chars': (                          # char information, tuple[tuple]
               (45,                    # unicode (4)
               16,                     # glyph id (font dependent)
               (458.14019775390625,    # origin.x (1)
               755.3758544921875),     # origin.y (1)
               (458.14019775390625,    # char bbox x0 (6)
               749.4671630859375,      # char bbox y0
               462.9649963378906,      # char bbox x1
               757.5071411132812)),    # char bbox y1
               ( ... ),                # more characters
            ),
   'color': (0.0,),                    # text color, tuple[float] (1)
   'colorspace': 1,                    # number of colorspace components (1)
   'descender': -0.30029296875,        # font descender (1)
   'dir': (1.0, 0.0),                  # writing direction (1)
   'flags': 12,                        # font flags (1)
   'font': 'CourierNewPSMT',           # font name (1)
   'linewidth': 0.4019999980926514,    # current line width value (3)
   'opacity': 1.0,                     # alpha value of the text (5)
   'layer': None,                      # name of Optional Content Group (9)
   'seqno': 246,                       # sequence number (8)
   'size': 8.039999961853027,          # font size (1)
   'spacewidth': 4.824785133358091,    # width of space char
   'type': 0,                          # span type (2)
   'wmode': 0                          # writing mode (1)
}

Details:

  1. 「(1)」でタグ付けされた情報は、TextPage (テキストページ) で説明された内容と同じ意味と値を持っています。

    • フォント flags の値には superscript フラグビットが含まれないことに注意してください。上付き文字の検出はMuPDF TextPage (テキストページ) 内で行われます。これは任意のフォントのプロパティではありません。

    • また、テキストの color は通常の浮動小数点数のタプル(0 <= f <= 1)でエンコードされており、sRGB形式ではありません。span["type"] に応じて、これを塗りつぶし色またはストローク色として解釈してください。

  2. テキストスパンには3つのタイプがあります:

    • 0:塗りつぶしテキスト - PDFテキストレンダリングモード0(0 Tr、PDFのデフォルト)と同等で、各文字の「内部」のみが表示されます。

    • 1:ストロークテキスト - 1 Tr に相当し、文字の境界のみが表示されます。

    • 3:無視されたテキスト - 3 Tr に相当し(非表示テキスト)。

  3. この文脈では、線の幅は span["type"] != 0 を処理する際にのみ重要であり、文字の境界線の厚さを決定します。この値はテキストデータと一緒に提供されないこともあります。この場合、fontsize の5%(span["size"] * 0.05)の値が生成されます。PDF内の「人工」の太字テキストは、通常、2 Tr によって作成されます。この場合、このケースの等価なスパンタイプは存在しません。代わりに、対応するテキストは2つの連続したスパンによって表されます。これらのスパンはすべての側面が同一であり、タイプ以外は異なります(0、1)。このタイプの状況を処理する責任はあなたにあります。Page.get_text() では、MuPDFがこれを代わりに行います。

  4. データのコンパクトさのために、文字のUnicodeがここで提供されます。文字自体には chr() という組み込み関数を使用します。

  5. スパンのテキストのアルファ/不透明度値、0 <= opacity <= 1、0は見えないテキスト、1(100%)は不透明です。span["type"] に応じて、この値を fill の不透明度または stroke の不透明度として解釈してください。

  6. (v1.19.0で変更) この値は「rawdict」の char["bbox"] と等しいか、近い値です。特に、bboxの 高さ の値は常に 「小さなグリフの高さ」 が要求されたかのように計算されます。

  7. (v1.19.0で新規) これはすべての文字bboxの合併です。

  8. (v1.19.0で新規) ページの外観を構築するコマンドを列挙します。テキストが実際には後で「描画」されるオブジェクトによって隠れるか、またはいくつかのオブジェクトの上にかかっているかを判断するのに使用できます。したがって、bboxがこのテキストスパンのbboxと交差または含まれている場合、以前のアイテムが(部分的に)カバー/非表示にされる可能性があります。

  9. (v1.22.0で新規) 該当する場合、Optional Content Group(OCG)の名前、または None

以下は、page.get_texttrace()page.get_text("rawdict") を比較した類似点と相違点のリストです:

  • メソッドは、テキストの量に依存しますが、"rawdict" の抽出と比較して最大 2倍速い です。

  • 返されるデータは 非常に小さく 、より多くの情報を提供します。

  • 追加のテキストの 不可視性のタイプを検出できます :不透明度 = 0またはタイプ > 1またはシーケンス番号の高いオブジェクトとの境界ボックスが重なる。

  • MuPDFが認識できない文字に対してUnicode 0xFFFD(65533)を返す場合、グリフIDから必要な情報を導き出すことができるかもしれません。

  • span["chars"] には スペースは含まれません 。ただし、ドキュメントの作成者が明示的にコード化しない限り、それらは Page.get_text() メソッドで発生するように 生成されません。自分自身の計算を行うのを助けるために、スペース文字の幅が提供されます。この値はフォントから派生しています。それ以外の場合はフォールバックフォントの値が取られます。

  • TextPage (テキストページ) のようにテキストを整理する取り組みはありません(ブロック、行、スパン、および文字の階層構造)。文字は単純に順番に抽出され、スパンに配置されます。スパンの特性が変更されるたびに、新しいスパンが開始されます。したがって、同じスパン内で異なる origin.y 値を持つ文字を見つけることができます(これは異なる行に表示されることを意味します)。スパンの文字が特定の順序でソートされているとは仮定できません。情報を理解し、span["dir"]span["wmode"] などを考慮に入れる必要があります。

  • リガチャは次のように表されます:
    • MuPDFは次のリガチャを処理します。 "fi"、 "ff"、 "fl"、 "ft"、 "st"、 "ffi"、および "ffl"(ほとんどは最初の3つが使用されます)。したがって、ページに "fi" のようなリガチャが含まれている場合、次の2つの文字アイテムが連続して表示されます。

      (102, glyph, (x, y), (x0, y0, x1, y1))  # 102 = ord("f")
      (105, -1, (x, y), (x0, y0, x0, y1))     # 105 = ord("i"), empty bbox!
      
    • これにより、最初の合字文字のbboxは、完全な合成グリフを含む領域です。後続の合字コンポーネントは、そのグリフ値が-1で幅がゼロであることで識別できます。

    • これらの2つまたは3つの文字のタプルを、合字自体を表す1つに置き換えたい場合があるかもしれません。次のような合字をUnicodeにマッピングします。

      • "ff" -> 0xFB00

      • "fi" -> 0xFB01

      • "fl" -> 0xFB02

      • "ffi" -> 0xFB03

      • "ffl" -> 0xFB04

      • "ft" -> 0xFB05

      • "st" -> 0xFB06

      したがって、上記の2つの例のタプルを次の単一のタプルで置き換えたい場合があります:(0xFB01, glyph, (x, y), (x0, y0, x1, y1))`(通常、0xFB01の正しいグリフIDをフォント内で調べる必要はありませんが、`font.has_glyph(0xFB01) を実行し、その戻り値を使用することができます)。

  • Changed in v1.19.3: Similar to other text extraction methods, the character and span bboxes envelop the character quads. To recover the quads, follow the same methods recover_quad(), recover_char_quad() or recover_span_quad() as explained in 辞書出力の構造. Use either None or span["dir"] for the writing direction.

  • v1.21.1 で変更:該当する場合、OCGの名前が "layer" に表示されます。


Page.wrap_contents()#

Ensures that the page's so-called graphics state is balanced and new content can be inserted correctly.

In versions 1.24.1+ of PyMuPDF the method was improved and is being executed automatically as required, so you should no longer need to concern yourself with it.

This method obsoletes the use of Page.clean_contents() in most cases. The advantage this method is a small footprint in terms of processing time and a low impact on the data size of incremental saves.


Page.is_wrapped#

Indicate whether the page's so-called graphic state is balanced. If False, Page.wrap_contents() should be executed if new content is inserted (only relevant in overlay=True mode). In newer versions (1.24.1+), this check and corresponding adjustments are automatically executed -- you therefore should not be concerned about this anymore.

戻り値の型:

bool


Page.get_text_blocks(flags=None)#

TextPage.extractBLOCKS() の非推奨のラッパーです。代わりにオプション "blocks" を使用して Page.get_text() を使用してください。

戻り値の型:

list[tuple]


Page.get_text_words(flags=None, delimiters=None)#

Deprecated wrapper for TextPage.extractWORDS(). Use Page.get_text() with the "words" option instead.

戻り値の型:

list[tuple]


Page.get_displaylist()#

ページをリストデバイスを介して実行し、そのディスプレイリストを返します。

戻り値の型:

DisplayList(ディスプレイリスト)

戻り値:

ページのディスプレイリスト。


Page.get_contents()#

PDFのみ:ページの contents オブジェクトの xref のリストを取得します。空であるか、複数の整数を含むことがあります。ページがクリーンアップされた場合(Page.clean_contents())、最大で1つのエントリになります。各/Contentsオブジェクトの "source" は、このリストのアイテムを使用して Document.xref_stream() で個別に読み取ることができます。一方、Page.read_contents() メソッドは、このリストを走査し、対応するソースを1つの bytes オブジェクトに連結します。

戻り値の型:

list[int]


Page.set_contents(xref)#

PDFのみ:ページの /Contents キーをこのxrefに設定します。以前に使用されていたコンテンツオブジェクトは無視され、ガベージコレクションを使用して削除できます。


Page.clean_contents(sanitize=True)#
  • v1.17.6で変更

PDFのみ:このページに関連付けられたすべての contents ツオブジェクトをクリーンアップして連結します。 "クリーニング"には、構文の修正、標準化、およびコンテンツストリームの "きれいな印刷"が含まれます。 sanitizeがtrueの場合、contentsresources オブジェクト間の不一致も修正されます。詳細については、Page.get_contents() を参照してください。

バージョン1.16.0以降、注釈はこのメソッドによって暗黙的にクリーンアップされなくなりました。 Annot.clean_contents() を別途使用してください。

パラメータ:

sanitize (bool) -- (v1.17.6で新たに) trueの場合、リソースとコンテンツオブジェクト間の同期が行われます。たとえば、ページのテキストでフォントが実際に使用されていない場合、それは /Resources/Font オブジェクトから削除されます。

警告

これは大量の新しいデータを生成し、古いデータを使用しないようにする複雑な機能です。増分保存 オプションと一緒に使用することは お勧めできません 。また、結果のシングルトンの新しい /Contents オブジェクトは 非圧縮です。したがって、オプション "deflate=True、garbage=3" を使用して 新しいファイル に保存する必要があります。


Page.read_contents()#

v1.17.0で新たに追加。 ページに関連付けられたすべての contents オブジェクトの連結を返します。クリーニングや変更などを行わずに、このソース全体を解析する必要がある場合にこのメソッドを使用します。

戻り値の型:

bytes


Annot.clean_contents(sanitize=True)#

アノテーションに関連付けられた contents ストリームをクリーンアップします。これは、Page.clean_contents() が実行するのと同じ種類のアクションですが、この注釈に制限されています。


Document.get_char_widths(xref=0, limit=256)#

ドキュメント内に存在するフォントに対して、文字のグリフと幅のリストを返します。フォントはPDFのクロスリファレンス番号 xref で指定する必要があります。この関数は、Page.insert_text() および Page.insert_textbox() から自動的に呼び出されます。したがって、自分で行う必要があることはほとんどありません。

パラメータ:
  • xref (int) -- ドキュメントに埋め込まれたPDFのクロスリファレンス番号。フォントの xref を見つけるには、例えば、ページ番号 pnodoc.get_page_fonts(pno) を使用し、返されたリストエントリの最初を取得します。

  • limit (int) -- 返されるエントリの数を制限します。256のデフォルト値は、1バイトの文字のみをサポートする「シンプルフォント」と呼ばれるフォントに対して適用されます(このメソッドで確認されます)。すべてのPDF PDFベース14フォント はシンプルフォントです。

戻り値の型:

list

戻り値:

limit のタプルのリストです。各文字cには、ord(c) のインデックスでエントリ (g、w) があります。タプルの g*(整数)エントリは文字のグリフIDで、float *w はその正規化された幅です。一部のフォントサイズに対する実際の幅は、w * :data:`fontsize` として計算できます。シンプルフォントの場合、gエントリは常に安全に無視できます。それ以外の場合、gc を視覚的に表現するための基礎です。

この関数は、text と呼ばれる文字列のピクセル幅を計算します:

def pixlen(text, widthlist, fontsize):
    try:
        return sum([widthlist[ord(c)] for c in text]) * fontsize
    except IndexError:
        raise ValueError:("max. code point found: %i, increase limit" % ord(max(text)))

Document.is_stream(xref)#
  • バージョン1.14.14で新規追加

PDFのみ:xref によって表されるオブジェクトが stream タイプかどうかを確認します。PDFでない場合や、有効なxref範囲外の場合はFalseを返します。

パラメータ:

xref (int) -- xref 番号。

戻り値:

streamendstream のキーワードペアで囲まれたデータに続いてオブジェクト定義がある場合は True


Document.get_new_xref()#

xref を1つ増やしてその番号を返します。これは新しいオブジェクトを挿入するために使用できます。

戻り値の型:

int :returns: 新しい xref エントリの数。PDFのクロスリファレンステーブルに新しいエントリのみが作成されます。この段階では、それに関連付けられたPDFオブジェクトはまだ存在しません。この番号で(空の)オブジェクトを作成するには、doc.update_xref(xref、"<<>>") を使用します。


Document.xref_length()#

xref テーブルの長さを返します。

戻り値の型:

int

戻り値:

xref テーブルのエントリ数。


recover_quad(line_dir, span)#

Page.get_text() のオプション "dict" または "rawdict" で抽出されたテキストスパンの四辺形を計算します。

パラメータ:
  • line_dir (tuple) -- 所有する行の line["dir"]Page.get_texttrace() からのスパンの場合は None を使用します。

  • span (dict) -- スパン。

戻り値:

スパンの Quad (クアッド)、テキストマーカーアノテーション('ハイライト' など)で使用できます。


recover_char_quad(line_dir, span, char)#

Page.get_text() のオプション "rawdict" で抽出されたテキスト文字の四辺形を計算します。

パラメータ:
  • line_dir (tuple) -- 所有する行の line["dir"]Page.get_texttrace() からのスパンの場合は None を使用します。

  • span (dict) -- スパン。

  • char (dict) -- 文字。

戻り値:

文字の Quad (クアッド)、テキストマーカーアノテーション('ハイライト' など)で使用できます。


recover_span_quad(line_dir, span, chars=None)#

Page.get_text() のオプション "rawdict" で抽出されたスパンの一部の文字の四辺形を計算します。

パラメータ:
  • line_dir (tuple) -- 所有する行の line["dir"]Page.get_texttrace() からのスパンの場合は None を使用します。

  • span (dict) -- スパン。

  • chars (list) -- 考慮する文字。省略した場合、。指定する場合、選択した抽出オプションは "rawdict" である必要があります。

戻り値:

選択された文字の Quad (クアッド) 、テキストマーカーアノテーション('ハイライト' など)で使用できます。


recover_line_quad(line, spans=None)#

Page.get_text() のオプション "dict" または "rawdict" で抽出されたテキスト行の一部のスパンの四辺形を計算します。

パラメータ:
  • line (dict) -- 行。

  • spans (list) -- line["spans"] のサブリスト。省略した場合、選択した行の四辺形が返されます。

戻り値:

選択された行のスパンの Quad (クアッド)、テキストマーカーアノテーション('ハイライト' など)で使用できます。


get_tessdata()#

Tesseractの言語サポートフォルダの名前を返します。環境変数 TESSDATA_PREFIX が設定されていない場合にこの関数を使用します

戻り値:

os.getenv("TESSDATA_PREFIX")None でない場合、またはTesseract-OCRがインストールされている場合は、tessdata の名前を見つけます。インストールが見つからない場合、False を返します。

このフォルダの名前は、メソッド Page.get_textpage_ocr()Pixmap.pdfocr_save()、および Pixmap.pdfocr_tobytes()tessdata パラメータに使用できます。


INFINITE_QUAD()#
INFINITE_RECT()#
INFINITE_IRECT()#

(ユニークな) 無限の四角形 Rect(-2147483648.0、-2147483648.0、2147483520.0、2147483520.0)、または IRectQuad (クアッド) の対応するものを返します。これは最大の可能な四角形で、すべての有効な四角形が含まれます。


EMPTY_QUAD()#
EMPTY_RECT()#
EMPTY_IRECT()#

「標準」の空白で無効な四角形 Rect(2147483520.0, 2147483520.0, -2147483648.0, -2147483648.0) または対応する四角形を返します。その左上と右下のポイント値は、無限の四角形と比較して反転しています。たとえば、page.get_text("dict") 辞書内の空の bboxes を示すために使用されます。ただし、無限に多くの空のまたは無効な四角形が存在します。


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