gpdf 패키지

개요

gpdf 패키지는 내부 레이어에서 자주 사용되는 함수를 재수출하는 **퍼사드(Facade)**입니다. 편의를 위해 gpdf를 임포트하거나, 특정 패키지를 직접 임포트할 수 있습니다.

import "github.com/gpdf-dev/gpdf"

// Using facade
doc := gpdf.NewDocument(gpdf.WithPageSize(gpdf.A4))
import (
    "github.com/gpdf-dev/gpdf/template"
    "github.com/gpdf-dev/gpdf/document"
)

// Using packages directly (recommended)
doc := template.New(template.WithPageSize(document.A4))

함수

NewDocument

func NewDocument(opts ...template.Option) *template.Document

새 PDF 문서 빌더를 생성합니다. 이것이 주요 진입점입니다.

doc := gpdf.NewDocument(
    gpdf.WithPageSize(gpdf.A4),
    gpdf.WithMargins(document.UniformEdges(document.Mm(20))),
)

FromJSON

func FromJSON(schema []byte, data any, opts ...template.Option) (*template.Document, error)

JSON 스키마 정의에서 선택적 Go 템플릿 데이터 바인딩을 사용하여 Document를 생성합니다.

doc, err := gpdf.FromJSON(schema, map[string]any{"title": "Report"})

FromTemplate

func FromTemplate(tmpl *template.Template, data any, opts ...template.Option) (*template.Document, error)

JSON 스키마 출력을 생성하는 사전 파싱된 Go 템플릿을 실행하여 Document를 생성합니다.

TemplateFuncMap

func TemplateFuncMap() template.FuncMap

Go 템플릿을 파싱할 때 사용할 헬퍼 함수(toJSON 등)를 반환합니다.

문서 옵션

함수설명
WithPageSize(size)페이지 치수 설정 (A4, A3, Letter, Legal)
WithMargins(edges)페이지 여백 설정
WithFont(family, data)TrueType 폰트 등록 ([]byte 허용)
WithDefaultFont(family, size)기본 폰트 패밀리 및 크기 설정
WithMetadata(meta)문서 메타데이터 설정
WithEncryption(opts...)AES-256 암호화 활성화
WithPDFA(opts...)PDF/A 준수 활성화

문서 메타데이터

gpdf.WithMetadata(document.DocumentMetadata{
    Title:   "Invoice #INV-2026-001",
    Author:  "ACME Corporation",
    Subject: "Monthly Invoice",
    Creator: "gpdf v1.0.4",
})

페이지 크기

상수치수
gpdf.A4 / document.A4210mm x 297mm (595.28pt x 841.89pt)
gpdf.A3 / document.A3297mm x 420mm (841.89pt x 1190.55pt)
gpdf.Letter / document.Letter8.5" x 11" (612pt x 792pt)
gpdf.Legal / document.Legal8.5" x 14" (612pt x 1008pt)

Document 메서드

AddPage

func (d *Document) AddPage() *PageBuilder

새 페이지를 추가하고 해당 빌더를 반환합니다.

func (d *Document) Header(fn func(p *PageBuilder))
func (d *Document) Footer(fn func(p *PageBuilder))

모든 페이지에 반복되는 콘텐츠를 정의합니다.

Generate / Render

func (d *Document) Generate() ([]byte, error)
func (d *Document) Render(w io.Writer) error

Generate()는 PDF를 바이트 슬라이스로 반환합니다. Render()io.Writer에 직접 씁니다.

PageBuilder 메서드

Row

func (p *PageBuilder) Row(height document.Value, fn func(r *RowBuilder))
func (p *PageBuilder) AutoRow(fn func(r *RowBuilder))

Row()는 고정 높이 행을 생성합니다. AutoRow()는 콘텐츠에 맞게 조절되는 행을 생성합니다.

RowBuilder 메서드

Col

func (r *RowBuilder) Col(span int, fn func(c *ColBuilder))

12열 그리드에서 span열을 차지하는 열을 생성합니다.

ColBuilder 메서드

메서드설명
Text(text, opts...)스타일 옵션과 함께 텍스트 추가
Image(data, opts...)이미지 추가 (JPEG 또는 PNG 바이트)
Table(headers, rows, opts...)테이블 추가
List(items, opts...)비순서 목록 추가
OrderedList(items, opts...)순서 목록 추가
Line(opts...)수평선 추가
Spacer(height)수직 간격 추가
QRCode(data, opts...)QR 코드 추가
Barcode(data, opts...)바코드 추가 (Code 128)
RichText(fn)혼합 스타일 인라인 텍스트 추가
PageNumber(opts...)현재 페이지 번호
TotalPages(opts...)전체 페이지 수

QR 코드 옵션

함수설명
QRSize(value)표시 크기 (너비 = 높이)
QRErrorCorrection(level)오류 정정: LevelL, LevelM, LevelQ, LevelH
QRScale(s)QR 모듈당 픽셀 수

바코드 옵션

함수설명
BarcodeWidth(value)표시 너비
BarcodeHeight(value)표시 높이
BarcodeFormat(format)바코드 형식 (기본값: Code 128)

기존 PDF 작업

Open

func Open(data []byte, opts ...template.Option) (*template.ExistingDocument, error)

기존 PDF를 읽기 및 수정을 위해 엽니다. 증분 업데이트(비파괴적 추가)를 통한 오버레이 작업을 지원하는 ExistingDocument를 반환합니다.

doc, err := gpdf.Open(pdfBytes)

ExistingDocument 메서드

메서드설명
PageCount() (int, error)PDF의 페이지 수 반환
Overlay(pageIndex int, fn func(p *PageBuilder)) error특정 페이지 위에 콘텐츠 추가 (0부터 시작하는 인덱스)
EachPage(fn func(pageIndex int, p *PageBuilder)) error모든 페이지 위에 콘텐츠 추가
FlattenForms() error모든 AcroForm 필드를 정적 페이지 콘텐츠로 플래트닝 Since v1.0.4
Save() ([]byte, error)수정된 PDF를 바이트 슬라이스로 반환
doc, err := gpdf.Open(pdfBytes, gpdf.WithFont("NotoSans", fontData))

// Add watermark on page 1
doc.Overlay(0, func(p *template.PageBuilder) {
    p.Absolute(document.Mm(40), document.Mm(120), func(c *template.ColBuilder) {
        c.Text("DRAFT", template.FontSize(72),
            template.TextColor(pdf.Gray(0.85)))
    })
})

// Add page numbers on every page
count, _ := doc.PageCount()
doc.EachPage(func(i int, p *template.PageBuilder) {
    p.Absolute(document.Mm(170), document.Mm(285), func(c *template.ColBuilder) {
        c.Text(fmt.Sprintf("%d / %d", i+1, count),
            template.FontSize(10), template.AlignRight())
    }, template.AbsoluteWidth(document.Mm(20)))
})

result, err := doc.Save()

PDF 병합 Since v1.0.2

Merge

func Merge(sources []Source, opts ...MergeOption) ([]byte, error)

여러 PDF 소스의 페이지를 하나의 출력 PDF로 결합합니다.

Source

type Source struct {
    Data  []byte    // 원시 PDF 바이트
    Pages PageRange // 포함할 페이지. 제로값 = 모든 페이지
}

PageRange

type PageRange struct {
    From int  // 1 기반 시작 페이지. 0 = 첫 번째 페이지
    To   int  // 1 기반 끝 페이지. 0 = 마지막 페이지
}

병합 옵션

함수설명
WithMergeMetadata(title, author, producer)병합 출력에 문서 정보(제목, 저자, 제작자) 설정

컴포넌트 생성자

함수설명
NewInvoice(data)청구서 PDF 생성
NewReport(data)보고서 PDF 생성
NewLetter(data)비즈니스 레터 PDF 생성

자세한 사용법은 컴포넌트를 참조하세요.