Font (フォント)#
新機能:v1.16.18
このクラスは、MuPDFで定義されたフォント(fz_font_s構造体)を表します。これは、新しいクラス TextWriter (テキストライター) と新しい Page.write_text()
に必要であり、現在、Page.insert_text()
または Page.insert_textbox()
メソッドでフォントがどのように使用されているかとは関係ありません。
Fontオブジェクトには、フォントbbox、定義済みグリフの数、グリフ名、単一グリフのbboxなど、有用な一般情報も含まれています。
メソッド/属性 |
短い説明 |
---|---|
文字の幅 |
|
グリフの矩形 |
|
グリフ名からUnicodeを取得 |
|
UnicodeのグリフIDを返す |
|
文字列の長さを計算 |
|
文字列の文字幅のタプル |
|
Unicodeのグリフ名を取得 |
|
サポートされているUnicodeの配列 |
|
フォントのアセンダ |
|
フォントのディセンダ |
|
フォントの矩形 |
|
フォントのバイナリイメージのコピー |
|
フォントのプロパティのコレクション |
|
サポートされているグリフの数 |
|
フォントの名前 |
|
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") = 931
、font.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() 。
- 戻り値:
- 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で書き直されました。単一の文字の幅を計算するには、以下のいずれかを使用でき、パフォーマンスに差異はありません:font.glyph_advance(ord("Ä")) * fontsize
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
フォントの名前。空文字列であることもあります。
- glyph_count#
- 戻り値の型:
int
グリフ数。
- ascender#
v1.18.0で新規追加
フォントのアセンダー値。詳細についてはこちらを参照してください。ただし、厳密な定義とは異なり、私たちの値にはベースラインを上回るすべてが含まれます。単に大文字の「A」と小文字の「a」の高さの違いだけでなく、ベースラインを上回るすべてが含まれます。
- 戻り値の型:
float
- descender#
v1.18.0で新規追加
フォントのディセンダー値。詳細についてはこちらを参照してください。この値は常に負であり、一部のグリフがベースライン以下に降りる部分、例えば「g」や「y」です。したがって、
アセンダー - ディセンダー
の値は、フォントのすべてのグリフが収まる総高さです。これはほとんどのフォントに当てはまりますが、いくつかの例外があります。特にカリグラフィーフォントなどです。- 戻り値の型:
float
- is_writable#
v1.18.0で新規追加
このフォントを TextWriter (テキストライター) で使用できるかどうかを示します。
- 戻り値の型:
bool
脚注