폰트

폰트 등록

문서를 생성할 때 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),
)

다음 단계