Font (フォント)#

  • 新機能:v1.16.18

このクラスは、MuPDFで定義されたフォント(fz_font_s構造体)を表します。これは、新しいクラス TextWriter (テキストライター) と新しい Page.write_text() に必要であり、現在、Page.insert_text() または Page.insert_textbox() メソッドでフォントがどのように使用されているかとは関係ありません。

Fontオブジェクトには、フォントbbox、定義済みグリフの数、グリフ名、単一グリフのbboxなど、有用な一般情報も含まれています。

メソッド/属性

短い説明

glyph_advance()

文字の幅

glyph_bbox()

グリフの矩形

glyph_name_to_unicode()

グリフ名からUnicodeを取得

has_glyph()

UnicodeのグリフIDを返す

text_length()

文字列の長さを計算

char_lengths()

文字列の文字幅のタプル

unicode_to_glyph_name()

Unicodeのグリフ名を取得

valid_codepoints()

サポートされているUnicodeの配列

ascender

フォントのアセンダ

descender

フォントのディセンダ

bbox

フォントの矩形

buffer

フォントのバイナリイメージのコピー

flags

フォントのプロパティのコレクション

glyph_count

サポートされているグリフの数

name

フォントの名前

is_writable

TextWriter (テキストライター) で使用可能なフォント

クラスAPI

class Font#
__init__(self, fontname=None, fontfile=None,
fontbuffer=None, script=0, language=None, ordering=-1, is_bold=0,
is_italic=0, is_serif=0)

フォントコンストラクタ。多くのパラメータは、要件に最も近いフォントを特定するために使用されます。必ずしもすべてのパラメータが必要とされるわけではありません - パラメータが評価されるロジックを説明する以下の疑似コードを参照してください。

パラメータ:
  • fontname (str) --

    PDFベース14フォント またはCJKフォントの名前のいずれか。また、"Arial"、"Times"、"Times Roman"などの選択的な名前も可能です。

    (v1.17.5で変更)

    pymupdf-fonts をインストールしている場合、fitz_fonts と下の表でリストされている新しい「予約済み」フォント名も利用可能です。

  • fontfile (str) -- システムのどこかにあるフォントファイルのファイル名 [1]

  • fontbuffer (bytes,bytearray,io.BytesIO) -- メモリ内にロードされたフォントファイル [1]

  • script (in) -- UCDN(Unicode Character Database Number)のスクリプト番号です。現在、PyMuPDFでサポートされている番号は、24、および32から35です。

  • language (str) -- UCDNスクリプトの番号。現在、PyMuPDFでサポートされているのは24、および32から35の数値です

  • ordering (int) -- CJKフォントの選択のための代替セレクタ。

  • is_bold (bool) -- 太字のフォントを探します。

  • is_italic (bool) -- イタリック体のフォントを探します。

  • is_serif (bool) -- セリフ付きのフォントを探します。

戻り値:

成功した場合はMuPDFフォント。適切なフォントを特定するための全体のチェックのシーケンスは次のとおりです。

引数

アクション

fontfile?

ファイルからフォントを作成し、失敗した場合は例外をスローします。

fontbuffer?

バッファからフォントを作成し、失敗した場合は例外をスローします。

ordering>=0

ユニバーサルフォントを作成し、常に成功します。

fontname?

ベース14フォント、ユニバーサルフォント、または pymupdf-fonts で提供されるフォントを作成します。下の表を参照してください。

注釈

通常の予約済みの名前「helv」、「tiro」などを使用すると、期待どおりの名前「Helvetica」、「Times-Roman」などのフォントが作成されます。ただしPage.insert_font() などとは異なり、

  • フォントファイルはPDFに 常に 埋め込まれます。

  • ギリシャ文字およびキリル文字は エンコーディング パラメータを必要とせずにサポートされます。

ordering >= 0を使用するか、フォント名「cjk」、「china-t」、「china-s」、「japan」、「korea」を使用すると、常に同じ「汎用」 フォント 「Droid Sans Fallback Regular」が作成されます。このフォントは、中国語、日本語、韓国語、ラテン文字、ギリシャ文字、キリル文字を含むすべての文字をサポートしています。これはサンセリフのフォントです。

実際、通常、「Droid Sans Fallback Regular」以外のサンセリフのフォントはほとんど必要ありません。ただし、このフォントファイルは比較的大きく、PDFファイルサイズを約1.65 MB(圧縮)増加させます。CJKのサポートが必要でない場合は、「helv」、「tiro」などを指定し、約35 KB(圧縮)で済むでしょう。

CJKとラテン文字の混合テキストがあることを 知っている 場合は、単に Font("cjk") を使用して、すべてをサポートし、実行を大幅に高速化します(最大3倍)。MuPDFは常にこの単一のフォントで任意の文字を見つけることができ、フォールバックをチェックする必要はありません。

ただし、他のフォントを使用する場合、CJK文字を書き込むことも自動的にできるようになります。MuPDFはこの状況を検出し、静かにユニバーサルフォントにフォールバックします(その場合、当然、PDFにも埋め込まれます)。

(v1.17.5で新登場) オプションで、pymupdf-fonts をインストールすると、いくつかの新しい「予約済み」フォント名コードが利用可能になります。 "Fira Mono" は等幅のサンセリフフォントセットで、FiraGO はラテン文字(キリル文字とギリシャ文字を含む)およびタイ語、アラビア語、ヘブライ語、デーバナガリ語をサポートする別のサンセリフの「ユニバーサル」フォントセットですが、CJK言語はサポートしていません。 FiraGOフォントのサイズは「Droid Sans Fallback」のサイズの1/4だけです(圧縮400 KB対1.65 MB) そして 、ユニバーサルフォントにはない太字、イタリック、太字イタリックのウェイトを提供しています。

"Space Mono" はGoogleフォントからのもう1つの素敵で小さな等幅フォントで、ラテン拡張文字をサポートし、すべての4つの重要なウェイトが含まれています。

次の表は、フォント名コードを対応するフォントにマッピングしています。パッケージの現在の内容については、そのドキュメンテーションを参照してください:

コード

フォント名

バージョン

コメント

figo

FiraGO レギュラー

v1.0.0

Helveticaよりも狭い

figbo

FiraGO ボールド

v1.0.0

figit

FiraGO イタリック

v1.0.0

figbi

FiraGO ボールドイタリック

v1.0.0

fimo

Fira Mono レギュラー

v1.0.0

fimbo

Fira Mono ボールド

v1.0.0

spacemo

Space Mono レギュラー

v1.0.1

spacembo

Space Mono ボールド

v1.0.1

spacemit

Space Mono イタリック

v1.0.1

spacembi

Space Mono ボールドイタリック

v1.0.1

math

Noto Sans Math レギュラー

v1.0.2

数学記号

music

Noto Music レギュラー

v1.0.2

音楽記号

symbol1

Noto Sans Symbols レギュラー

v1.0.2

"symb"の代替

symbol2

Noto Sans Symbols2 レギュラー

v1.0.2

拡張記号セット

notos

Noto Sans レギュラー

v1.0.3

Helveticaの代替

notosit

Noto Sans イタリック

v1.0.3

notosbo

Noto Sans ボールド

v1.0.3

notosbi

Noto Sans ボールドイタリック

v1.0.3

has_glyph(chr, language=None, script=0, fallback=False)#

指定した Unicode 文字 chr がフォント内または(オプションで)フォールバックフォント内に存在するかどうかを確認します。これは、「TOFU(豆腐)」と呼ばれる記号が出力に表示されるかどうかを確認するために使用できます。

パラメータ:
  • chr (int) -- 文字の Unicode 値(すなわち、ord() 関数の結果)。

  • language (str) -- 言語(現在は未使用)。

  • script (int) -- UCDN(Unicode Common Locale Data Repository)スクリプト番号。

  • fallback (bool) -- (v1.17.5 で新たに追加) フォールバックフォントでの拡張検索を実行するか、現在のフォントに制限するかを指定します(デフォルト)。

戻り値:

(v1.17.7 で変更) グリフ番号。ゼロはグリフが見つからないことを示します。

valid_codepoints()#
  • v1.17.5 で新たに追加

このフォントがサポートする Unicode の配列を返します。

戻り値:

Font.glyph_count 以上の長さを持つ array.array [2]。つまり、この配列内の各アイテムの chr() は、フォールバックを使用せずにフォント内にグリフを持っていることを示します。以下はサポートされるグリフの例示です:

>>> import pymupdf
>>> font = pymupdf.Font("math")
>>> vuc = font.valid_codepoints()
>>> for i in vuc:
      print("%04X %s (%s)" % (i, chr(i), font.unicode_to_glyph_name(i)))
0000
000D   (CR)
0020   (space)
0021 ! (exclam)
0022 " (quotedbl)
0023 # (numbersign)
0024 $ (dollar)
0025 % (percent)
...
00AC ¬ (logicalnot)
00B1 ± (plusminus)
...
21D0 ⇐ (arrowdblleft)
21D1 ⇑ (arrowdblup)
21D2 ⇒ (arrowdblright)
21D3 ⇓ (arrowdbldown)
21D4 ⇔ (arrowdblboth)
...
221E ∞ (infinity)
...

注釈

このメソッドは、CMAP(文字マップ、charmap、/ToUnicode PDF キー)を持つフォントに対してのみ意味のあるデータを返します。それ以外の場合、この配列は長さ1で、ゼロのみを含みます。

glyph_advance(chr, language=None, script=0, wmode=0)#

文字のグリフ(視覚的な表現)の「幅」を計算します。

パラメータ:
  • chr (int) -- 文字のUnicode番号。文字自体ではなく、ord() を使用します。文字がそのフォントでサポートされていない場合でも、必要に応じてフォールバックフォントがチェックされるため、通常は機能するはずです。

  • wmode (int) -- 書き込みモード、0 = 横方向、1 = 縦方向。

その他のパラメータは現在使用されていません。

戻り値:

フォントサイズ 1に対するグリフの幅を表す浮動小数点数。

glyph_name_to_unicode(name)#

指定されたグリフ名のUnicode値を返します。特定のシンボルを出力したい場合は、chr() と組み合わせて使用します。

パラメータ:

name (str) -- グリフの名前。

戻り値:

Unicode整数、または名前が不明な場合は65533 = 0xFFFDです。例:font.glyph_name_to_unicode("Sigma") = 931font.glyph_name_to_unicode("sigma") = 963 。Adobe Glyph Listの出版物を参照して、グリフ名とUnicode番号のリストを確認してください。例:

>>> font = pymupdf.Font("helv")
>>> font.has_glyph(font.glyph_name_to_unicode("infinity"))
True

glyph_bbox(chr, language=None, script=0)#

fontsize 1に対するグリフの矩形領域。

パラメータ:

chr (int) -- 文字の ord()

戻り値:

Rect (矩形)

unicode_to_glyph_name(ch)#

文字のグリフの名前を表示します。

パラメータ:

ch (int) -- 文字のunicode番号。文字自体ではなく ord() を使用します。

戻り値:

グリフの名前を表す文字列。例:font.glyph_name(ord("#")) = "numbersign" 。無効なコードの場合、".notfound" が返されます。

注釈

(1.18.0で変更) このメソッドと:meth:Font.glyph_name_to_unicode はもはやフォントに依存せず、Adobe Glyph List から情報を取得します。pymupdf.unicode_to_glyph_name() とresp. pymupdf.glyph_name_to_unicode() としても利用可能です。

text_length(text, fontsize=11)#

Unicode文字列の長さをポイント単位で計算します。

注釈

Base-14フォントに対しては、get_text_length() と機能が重複しています。

パラメータ:
  • text (str) -- テキスト文字列、UTF-8エンコード。

  • fontsize (float) -- fontsize

戻り値の型:

float

戻り値:

PDFに格納された文字列のポイント単位の長さ。文字がフォントに含まれていない場合、自動的にフォールバックフォントで検索されます。

注釈

このメソッドは元々Pythonで実装され、Font.glyph_advance() を呼び出すことに基づいていました。性能の理由から、v1.18.14向けにCで書き直されました。単一の文字の幅を計算するには、以下のいずれかを使用でき、パフォーマンスに差異はありません:

  1. font.glyph_advance(ord("Ä")) * fontsize

  2. font.text_length("Ä", fontsize=fontsize)

複数文字の文字列に対して、このメソッドは以前の実装と比べて非常に高速で、各文字ごとに約0.5マイクロ秒かかる代わりに、2番目以降の文字には12.5ナノ秒しか必要ありません。

char_lengths(text, fontsize=11)#

v1.18.14で新たに導入

Unicode文字列の文字の長さ(ポイント単位)のシーケンス。

パラメータ:
  • text (str) -- テキスト文字列、UTF-8エンコード。

  • fontsize (float) -- fontsize

戻り値の型:

tuple

戻り値:

PDFに保存される文字列の各文字の長さ(ポイント単位)。これは、Font.text_length() を各文字に分解したようなものです。高速なメソッドであり、例えば:meth:TextWriter.fill_textbox で使用されています。以下が成り立ちます(丸め誤差を許容する):font.text_length(text) == sum(font.char_lengths(text))

>>> font = pymupdf.Font("helv")
>>> text = "PyMuPDF"
>>> font.text_length(text)
50.115999937057495
>>> pymupdf.get_text_length(text, fontname="helv")
50.115999937057495
>>> sum(font.char_lengths(text))
50.115999937057495
>>> pprint(font.char_lengths(text))
(7.336999952793121,  # P
5.5,                 # y
9.163000047206879,   # M
6.115999937057495,   # u
7.336999952793121,   # P
7.942000031471252,   # D
6.721000015735626)   # F

buffer#
  • 新機能 v1.17.6

バイナリフォントファイルのコンテンツのコピー。

戻り値の型:

bytes

flags#

Helveticaの例など、さまざまなフォントプロパティを持つ辞書で、それぞれがブール値として表されています。

>>> pprint(font.flags)
{'bold': 0,
'fake-bold': 0,
'fake-italic': 0,
'invalid-bbox': 0,
'italic': 0,
'mono': 0,
'opentype': 0,
'serif': 1,
'stretch': 0,
'substitute': 0}
戻り値の型:

dict

name#
戻り値の型:

str

フォントの名前。空文字列であることもあります。

bbox#

フォントのbbox。これは、そのグリフのbboxの最大値です。

戻り値の型:

Rect (矩形)

glyph_count#
戻り値の型:

int

グリフ数。

ascender#
  • v1.18.0で新規追加

フォントのアセンダー値。詳細についてはこちらを参照してください。ただし、厳密な定義とは異なり、私たちの値にはベースラインを上回るすべてが含まれます。単に大文字の「A」と小文字の「a」の高さの違いだけでなく、ベースラインを上回るすべてが含まれます。

戻り値の型:

float

descender#
  • v1.18.0で新規追加

フォントのディセンダー値。詳細についてはこちらを参照してください。この値は常に負であり、一部のグリフがベースライン以下に降りる部分、例えば「g」や「y」です。したがって、アセンダー - ディセンダー の値は、フォントのすべてのグリフが収まる総高さです。これはほとんどのフォントに当てはまりますが、いくつかの例外があります。特にカリグラフィーフォントなどです。

戻り値の型:

float

is_writable#
  • v1.18.0で新規追加

このフォントを TextWriter (テキストライター) で使用できるかどうかを示します。

戻り値の型:

bool

脚注


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