Font¶
v1.16.18의 새로운 기능
이 클래스는 MuPDF 에서 정의된 글꼴(fz_font_s 구조)을 나타냅니다. 새로운 클래스 TextWriter (텍스트 라이터) 및 새로운 Page.write_text() 에 필요합니다. 현재는 Page.insert_text() 또는 Page.insert_textbox() 메서드에서 글꼴이 사용되는 방식과 연결되어 있지 않습니다.
Font 객체는 글꼴 bbox, 정의된 글리프 수, 글리프 이름 또는 단일 글리프의 bbox 와 같은 유용한 일반 정보도 포함합니다.
Method / Attribute |
Short Description |
|---|---|
문자 너비 |
|
글리프 사각형 |
|
글리프 이름에서 유니코드 가져오기 |
|
유니코드의 글리프 ID 반환 |
|
문자열 길이 계산 |
|
문자열의 문자 너비 튜플 |
|
유니코드의 글리프 이름 가져오기 |
|
지원되는 유니코드 배열 |
|
글꼴 상승부 |
|
글꼴 하강부 |
|
글꼴 사각형 |
|
글꼴의 바이너리 이미지 복사본 |
|
글꼴 속성 모음 |
|
지원되는 글리프 수 |
|
글꼴 이름 |
|
굵게이면 |
|
고정폭이면 |
|
세리프이면 |
|
이탤릭이면 |
Class 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)
Font 생성자. 많은 매개변수는 요구사항에 가장 가까운 글꼴을 찾는 데 사용됩니다. 모든 매개변수가 항상 필요한 것은 아닙니다 – 매개변수가 평가되는 방식의 논리를 설명하는 아래 의사 코드를 참조하세요.
- 매개변수:
fontname (str) –
PDF Base 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 스크립트 번호. 현재 PyMuPDF 에서 지원되는 번호는 24, 32부터 35까지입니다.
language (str) – “zh-Hant”(번체 중국어), “zh-Hans”(간체 중국어), “ja”(일본어), “ko”(한국어) 값 중 하나. 그렇지 않으면 하위 집합 1, 2, 3 및 5의 모든 ISO 639 코드도 가능하지만 현재는 문서화만 되어 있습니다.
ordering (int) – CJK 글꼴 중 하나에 대한 대체 선택자.
is_bold (bool) – 굵은 글꼴을 찾습니다.
is_italic (bool) – 이탤릭 글꼴을 찾습니다.
is_serif (bool) – 세리프 글꼴을 찾습니다.
- 반환:
성공하면 MuPDF 글꼴. 적절한 글꼴을 결정하기 위한 전체 확인 순서는 다음과 같습니다:
Argument
Action
fontfile?
파일에서 글꼴 생성, 실패 시 예외 발생.
fontbuffer?
버퍼에서 글꼴 생성, 실패 시 예외 발생.
ordering>=0
범용 글꼴 생성, 항상 성공.
fontname?
Base-14 글꼴, 범용 글꼴 또는 pymupdf-fonts 에서 제공하는 글꼴을 생성합니다. 아래 표를 참조하세요.
참고
일반적인 예약된 이름 “helv”, “tiro” 등을 사용하면 예상되는 이름 “Helvetica”, “Times-Roman” 등의 글꼴이 생성됩니다. 그러나
Page.insert_font()및 유사한 메서드와 달리,글꼴 파일이 항상 PDF에 임베드됩니다,
그리스 문자 및 키릴 문자는 encoding 매개변수 없이 지원됩니다.
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 (
pip install pymupdf-fonts)를 설치하면 일부 새로운 “예약된” 글꼴 이름 코드를 사용할 수 있습니다. “Fira Mono” 는 고정폭 산세리프 글꼴 세트이고 FiraGO 는 모든 라틴 문자(키릴 문자 및 그리스 문자 포함)와 태국어, 아랍어, 히브리어 및 데바나가리어를 지원하는 또 다른 비세리프 “범용” 글꼴 세트입니다 – 하지만 CJK 언어는 지원하지 않습니다. FiraGO 글꼴의 크기는 “Droid Sans Fallback” 크기의 1/4에 불과합니다(압축 시 400 KB vs. 1.65 MB) – 그리고 굵게, 이탤릭, 굵은 이탤릭 가중치를 제공합니다 – 범용 글꼴은 제공하지 않습니다.“Space Mono” 는 Google Fonts의 또 다른 좋고 작은 고정폭 글꼴로, Latin Extended 문자를 지원하며 모든 4가지 중요한 가중치를 제공합니다.
다음 표는 글꼴 이름 코드를 해당 글꼴에 매핑합니다. 패키지의 현재 내용은 해당 문서를 참조하세요:
Code
Fontname
New in
Comment
figo
FiraGO Regular
v1.0.0
Helvetica보다 좁음
figbo
FiraGO Bold
v1.0.0
figit
FiraGO Italic
v1.0.0
figbi
FiraGO Bold Italic
v1.0.0
fimo
Fira Mono Regular
v1.0.0
fimbo
Fira Mono Bold
v1.0.0
spacemo
Space Mono Regular
v1.0.1
spacembo
Space Mono Bold
v1.0.1
spacemit
Space Mono Italic
v1.0.1
spacembi
Space Mono Bold-Italic
v1.0.1
math
Noto Sans Math Regular
v1.0.2
수학 기호
music
Noto Music Regular
v1.0.2
음악 기호
symbol1
Noto Sans Symbols Regular
v1.0.2
“symb”의 대체
symbol2
Noto Sans Symbols2 Regular
v1.0.2
확장 기호 세트
notos
Noto Sans Regular
v1.0.3
Helvetica의 대체
notosit
Noto Sans Italic
v1.0.3
notosbo
Noto Sans Bold
v1.0.3
notosbi
Noto Sans BoldItalic
v1.0.3
- has_glyph(chr, language=None, script=0, fallback=False)¶
유니코드
chr가 글꼴 또는 (선택적으로) 일부 대체 글꼴에 존재하는지 확인합니다. 출력에 “TOFU” 기호가 나타날지 확인하는 데 사용할 수 있습니다.- 매개변수:
chr (int) – 문자의 유니코드(즉,
ord()).language (str) – 언어 – 현재 사용되지 않음.
script (int) – UCDN 스크립트 번호.
fallback (bool) – (v1.17.5의 새로운 기능) 대체 글꼴에서 확장 검색을 수행하거나 현재 글꼴로 제한합니다(기본값).
- 반환:
(1.17.7에서 변경됨) 글리프 번호. 0은 글리프를 찾지 못했음을 나타냅니다.
- valid_codepoints()¶
v1.17.5에서 새로 추가됨
이 글꼴이 지원하는 유니코드 배열을 반환합니다.
- 반환:
길이가 최대
Font.glyph_count인array.array[2]. 즉, 이 배열의 모든 항목의chr()는 대체 글꼴을 사용하지 않고 글꼴에 글리프를 가집니다. 지원되는 글리프의 예제 표시는 다음과 같습니다:>>> import pymupdf >>> font = pymupdf.Font("math") >>> vuc = font.valid_codepoints() >>> for i in vuc: >>> print(f"{i:04X} {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,
/ToUnicodePDF 키)가 있는 글꼴에 대해서만 의미 있는 데이터를 반환합니다. 그렇지 않으면 이 배열의 길이는 1이고 0만 포함합니다.
- glyph_advance(chr, language=None, script=0, wmode=0)¶
문자 글리프의 “너비”를 계산합니다(시각적 표현).
- 매개변수:
chr (int) – 문자의 유니코드 번호. 문자 자체가 아닌
ord()를 사용하세요. 다시 말하지만, 글꼴이 문자를 지원하지 않더라도 일반적으로 작동해야 합니다. 필요한 경우 대체 글꼴이 확인되기 때문입니다.wmode (int) – 쓰기 모드,
0= 가로,1= 세로.
다른 매개변수는 현재 사용되지 않습니다.
- 반환:
fontsize 1 에 상대적인 글리프 너비를 나타내는 float.
- glyph_name_to_unicode(name)¶
주어진 글리프 이름에 대한 유니코드 값을 반환합니다. 예를 들어 특정 기호를 출력하려면
chr()와 함께 사용하세요.- 매개변수:
name (str) – 글리프의 이름.
- 반환:
유니코드 정수, 또는 이름을 알 수 없는 경우 65533 = 0xFFFD. 예:
font.glyph_name_to_unicode("Sigma") = 931,font.glyph_name_to_unicode("sigma") = 963. 글리프 이름과 유니코드 번호 목록은 Adobe Glyph List 출판물을 참조하세요. 예:>>> font = pymupdf.Font("helv") >>> font.has_glyph(font.glyph_name_to_unicode("infinity")) True
- glyph_bbox(chr, language=None, script=0)¶
fontsize1에 상대적인 글리프 사각형.- 매개변수:
chr (int) – 문자의
ord().- 반환:
Rect.
- unicode_to_glyph_name(ch)¶
문자 글리프의 이름을 표시합니다.
- 매개변수:
ch (int) – 문자의 유니코드 번호. 문자 자체가 아닌
ord()를 사용하세요.- 반환:
글리프 이름을 나타내는 문자열. 예:
font.glyph_name(ord("#")) = "numbersign". 잘못된 코드의 경우 “.notfound”가 반환됩니다.참고
(v1.18.0에서 변경됨) 이 메서드와
Font.glyph_name_to_unicode()는 더 이상 글꼴에 의존하지 않으며 대신 Adobe Glyph List 에서 정보를 검색합니다.pymupdf.unicode_to_glyph_name()및 각각pymupdf.glyph_name_to_unicode()로도 사용할 수 있습니다.
- text_length(text, fontsize=11)¶
유니코드 문자열의 포인트 단위 길이를 계산합니다.
참고
Base-14 글꼴에 대해서만
get_text_length()와 기능적 중복이 있습니다.- 매개변수:
text (str) – UTF-8로 인코딩된 텍스트 문자열.
fontsize (float) –
fontsize.
- 반환 형식:
float
- 반환:
PDF에 저장될 때 포인트 단위의 문자열 길이. 글꼴에 문자가 포함되어 있지 않으면 자동으로 대체 글꼴에서 찾습니다.
참고
이 메서드는 원래
Font.glyph_advance()호출을 기반으로 Python에서 구현되었습니다. 성능상의 이유로 v1.18.14에서 C로 다시 작성되었습니다. 단일 문자의 너비를 계산하려면 성능 저하 없이 다음 중 하나를 사용할 수 있습니다:font.glyph_advance(ord("Ä")) * fontsizefont.text_length("Ä", fontsize=fontsize)
다중 문자 문자열의 경우, 이 메서드는 이전 구현과 비교하여 큰 성능 이점을 제공합니다: 각 문자에 대해 약 0.5 마이크로초 대신 두 번째 및 이후 문자에는 12.5 나노초만 필요합니다.
- char_lengths(text, fontsize=11)¶
v1.18.14에서 새로 추가됨
유니코드 문자열의 포인트 단위 문자 길이 시퀀스.
- 매개변수:
text (str) – UTF-8로 인코딩된 텍스트 문자열.
fontsize (float) –
fontsize.
- 반환 형식:
tuple
- 반환:
PDF에 저장될 때 문자열 문자의 포인트 단위 길이.
Font.text_length()를 단일 문자로 분해한 것처럼 작동합니다. 이것은 고속 메서드이며 예를 들어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¶
각각 bool로 표현되는 다양한 글꼴 속성의 딕셔너리. 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
글꼴 이름. “” 또는 “(null)”일 수 있습니다.
- glyph_count¶
- 반환 형식:
int
글꼴에 정의된 글리프 수.
- ascender¶
v1.18.0에서 새로 추가됨
글꼴의 상승부 값, 자세한 내용은 ascender typography 를 참조하세요. 엄격한 정의와 차이가 있음을 참고하세요: 우리의 값은 기준선 위의 모든 것을 포함합니다 – 대문자 “A”와 소문자 “a” 사이의 높이 차이만이 아닙니다.
- 반환 형식:
float
- descender¶
v1.18.0에서 새로 추가됨
글꼴의 하강부 값, 자세한 내용은 descender typography 를 참조하세요. 이 값은 항상 음수이며 일부 글리프가 기준선 아래로 내려가는 부분입니다. 예를 들어 “g” 또는 “y”. 결과적으로
ascender - descender값은 글꼴의 모든 글리프가 들어맞는 전체 높이입니다. 이것은 적어도 대부분의 글꼴에 대해 참입니다 – 항상 그렇듯이 예외가 있으며, 특히 필기체 글꼴 등에 해당합니다.- 반환 형식:
float
- is_bold¶
- is_italic¶
- is_monospaced¶
- is_serif¶
명확한 의미를 가진 여러 속성.
Font.flags딕셔너리의 일부 값을 반영합니다.- 반환 형식:
bool
Footnotes
