PDF 병합

개요

Since v1.0.2

gpdf는 여러 PDF 문서를 하나로 병합할 수 있습니다. 전체 문서를 결합하거나 각 소스에서 특정 페이지 범위를 추출할 수 있습니다.

일반적인 사용 사례:

  • 표지 페이지와 생성된 콘텐츠 결합
  • 청구서를 하나의 번들로 병합
  • 대용량 문서에서 특정 페이지 추출
  • 여러 소스에서 보고서 조합

기본 병합

gpdf.Merge()를 사용하여 두 개 이상의 PDF를 결합합니다:

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

cover, _ := os.ReadFile("cover.pdf")
body, _ := os.ReadFile("body.pdf")

merged, err := gpdf.Merge([]gpdf.Source{
    {Data: cover},
    {Data: body},
})
if err != nil {
    log.Fatal(err)
}

os.WriteFile("output.pdf", merged, 0644)

Source는 원시 PDF 바이트를 포함합니다. 기본적으로 각 소스의 모든 페이지가 포함됩니다.

페이지 범위 추출

PageRange를 사용하여 소스에서 특정 페이지만 포함합니다 (1 기반, 양 끝 포함):

full, _ := os.ReadFile("report.pdf")

// 2~4 페이지 추출
extracted, err := gpdf.Merge([]gpdf.Source{
    {Data: full, Pages: gpdf.PageRange{From: 2, To: 4}},
})

PageRange 규칙:

  • From: 0 또는 생략 — 첫 번째 페이지부터 시작
  • To: 0 또는 생략 — 마지막 페이지까지 포함
  • 제로값 PageRange{} — 모든 페이지 포함

메타데이터 설정

WithMergeMetadata를 사용하여 병합된 출력에 문서 정보를 설정합니다:

merged, err := gpdf.Merge(
    []gpdf.Source{
        {Data: cover},
        {Data: body},
        {Data: appendix},
    },
    gpdf.WithMergeMetadata("Policy Bundle", "Example Ltd", "gpdf"),
)

매개변수: title, author, producer.

병합 + 오버레이

병합 후 페이지 번호나 워터마크를 추가하려면 병합과 오버레이를 결합합니다:

// 1단계: 문서 병합
merged, _ := gpdf.Merge([]gpdf.Source{
    {Data: cover},
    {Data: body},
})

// 2단계: 병합된 결과를 열고 페이지 번호 추가
doc, _ := gpdf.Open(merged)
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, _ := doc.Save()
os.WriteFile("final.pdf", result, 0644)

API 레퍼런스

함수 / 타입설명
gpdf.Merge(sources, opts...)여러 PDF를 하나로 병합
gpdf.Source입력 PDF: Data []byte + Pages PageRange
gpdf.PageRange1 기반 양 끝 포함 범위: From, To (0 = 기본값)
gpdf.WithMergeMetadata(title, author, producer)출력에 문서 메타데이터 설정

다음 단계