폰트
폰트 등록
문서를 생성할 때 TrueType 폰트를 등록합니다:
fontData, _ := os.ReadFile("fonts/NotoSansJP-Regular.ttf")
doc := template.New(
template.WithPageSize(document.A4),
template.WithFont("NotoSansJP", fontData),
template.WithDefaultFont("NotoSansJP", 12),
)
여러 폰트 패밀리
다양한 용도에 맞게 여러 폰트를 등록합니다:
regular, _ := os.ReadFile("fonts/NotoSansJP-Regular.ttf")
bold, _ := os.ReadFile("fonts/NotoSansJP-Bold.ttf")
mono, _ := os.ReadFile("fonts/RobotoMono-Regular.ttf")
doc := template.New(
template.WithFont("NotoSansJP", regular),
template.WithFont("NotoSansJP-Bold", bold),
template.WithFont("RobotoMono", mono),
template.WithDefaultFont("NotoSansJP", 12),
)
FontFamily()를 사용하여 텍스트 요소에서 폰트를 전환합니다:
c.Text("Regular text") // uses default NotoSansJP
c.Text("Bold heading", template.FontFamily("NotoSansJP-Bold"), template.FontSize(18))
c.Text("Code snippet", template.FontFamily("RobotoMono"), template.FontSize(10))
CJK 지원
gpdf는 일본어, 중국어, 한국어 텍스트를 최우선으로 지원합니다. CJK 기능에는 금칙처리 규칙(줄 시작/끝에서 특정 문자 금지)에 따른 자동 줄바꿈이 포함됩니다.
fontData, _ := os.ReadFile("fonts/NotoSansJP-Regular.ttf")
doc := template.New(
template.WithPageSize(document.A4),
template.WithMargins(document.UniformEdges(document.Mm(20))),
template.WithFont("NotoSansJP", fontData),
template.WithDefaultFont("NotoSansJP", 12),
)
page := doc.AddPage()
page.AutoRow(func(r *template.RowBuilder) {
r.Col(12, func(c *template.ColBuilder) {
c.Text("日本語テキストのサンプル", template.FontSize(18))
c.Text("gpdfは純Go・ゼロ依存のPDF生成ライブラリです。")
c.Text("CJKテキストの改行やレイアウトを正しく処理します。")
})
})
다국어 CJK 문서
여러 CJK 언어가 포함된 문서에서는 각 폰트를 개별적으로 등록하고 FontFamily()로 전환합니다:
jpFont, _ := os.ReadFile("fonts/NotoSansJP-Regular.ttf")
scFont, _ := os.ReadFile("fonts/NotoSansSC-Regular.ttf")
krFont, _ := os.ReadFile("fonts/NotoSansKR-Regular.ttf")
doc := template.New(
template.WithPageSize(document.A4),
template.WithFont("NotoSansJP", jpFont),
template.WithFont("NotoSansSC", scFont),
template.WithFont("NotoSansKR", krFont),
template.WithDefaultFont("NotoSansKR", 12),
)
page := doc.AddPage()
page.AutoRow(func(r *template.RowBuilder) {
r.Col(4, func(c *template.ColBuilder) {
c.Text("こんにちは", template.FontFamily("NotoSansJP"))
})
r.Col(4, func(c *template.ColBuilder) {
c.Text("你好", template.FontFamily("NotoSansSC"))
})
r.Col(4, func(c *template.ColBuilder) {
c.Text("안녕하세요", template.FontFamily("NotoSansKR"))
})
})
CJK 콘텐츠가 포함된 QR 코드
QR 코드는 일본어를 포함한 유니코드 콘텐츠를 지원합니다:
c.QRCode("こんにちは世界", template.QRSize(document.Mm(30)))
폰트 서브셋팅
gpdf는 자동으로 TrueType 폰트를 서브셋합니다 — 문서에서 실제로 사용된 글리프만 임베딩됩니다. 이는 특히 수만 개의 글리프를 포함할 수 있는 CJK 폰트의 파일 크기를 크게 줄여줍니다.
지원되는 폰트 형식
| 형식 | 지원 |
|---|---|
| TrueType (.ttf) | 완전 지원 |
| OpenType (.otf) | 부분 지원 (TrueType 아웃라인) |
| WOFF / WOFF2 | 미지원 |
| Type 1 | 미지원 |
권장 폰트
| 폰트 | 용도 |
|---|---|
| Noto Sans JP | 일본어 텍스트 |
| Noto Sans SC | 중국어 간체 |
| Noto Sans KR | 한국어 텍스트 |
| Noto Sans | 라틴/서양 텍스트 |
| Inter | 모던 UI 스타일 문서 |
| Roboto Mono | 코드 및 고정폭 텍스트 |
JSON 스키마에서 폰트 사용
JSON 스키마를 사용할 때 폰트는 Go 옵션을 통해 등록합니다:
fontData, _ := os.ReadFile("fonts/NotoSansJP-Regular.ttf")
schema := []byte(`{
"page": {"size": "A4"},
"body": [
{"row": {"cols": [
{"span": 12, "text": "日本語テキスト", "style": {"font": "NotoSansJP"}}
]}}
]
}`)
doc, err := template.FromJSON(schema, nil,
template.WithFont("NotoSansJP", fontData),
)