폼 플래트닝

개요

Since v1.0.4

gpdf는 대화형 AcroForm 필드(텍스트 필드, 체크박스, 라디오 버튼 등)를 정적 페이지 콘텐츠로 플래트닝할 수 있습니다. 플래트닝 후 폼 필드는 더 이상 편집할 수 없으며, 시각적 표현이 페이지에 고정됩니다.

일반적인 사용 사례:

  • 작성된 폼을 정적 문서로 보관
  • 제출된 폼의 추가 편집 방지
  • 인쇄 또는 배포를 위한 폼 준비
  • 대화형 PDF를 정적 PDF로 변환

기본 플래트닝

gpdf.Open()으로 연 기존 문서에서 FlattenForms()를 사용합니다:

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

// 작성된 폼 필드가 있는 PDF 읽기
pdfBytes, _ := os.ReadFile("filled-form.pdf")

doc, err := gpdf.Open(pdfBytes)
if err != nil {
    log.Fatal(err)
}

// 모든 폼 필드를 정적 콘텐츠로 플래트닝
if err := doc.FlattenForms(); err != nil {
    log.Fatal(err)
}

result, _ := doc.Save()
os.WriteFile("flattened.pdf", result, 0644)

플래트닝되는 요소

FlattenForms()는 외형 스트림이 있는 모든 위젯 어노테이션(폼 필드 위젯)을 처리합니다:

  • 텍스트 필드 (Tx) — 입력된 텍스트가 정적 콘텐츠로 렌더링됩니다
  • 체크박스 및 라디오 버튼 (Btn) — 선택된 상태가 렌더링됩니다
  • 기타 위젯 타입 — 외형 스트림(/AP 딕셔너리)이 있는 모든 위젯

보존되는 요소

위젯이 아닌 어노테이션은 제거되지 않습니다:

  • 링크 어노테이션 (하이퍼링크)
  • 텍스트 어노테이션 (댓글, 스티커 노트)
  • 기타 비폼 어노테이션

모든 PDF에서 안전하게 호출 가능

PDF에 AcroForm 필드가 없는 경우 FlattenForms()는 아무 작업도 수행하지 않고 nil을 반환합니다:

doc, _ := gpdf.Open(regularPDFBytes)

// 안전 — 폼이 없으면 아무 작업도 수행하지 않음
if err := doc.FlattenForms(); err != nil {
    log.Fatal(err)
}

result, _ := doc.Save()

플래트닝 + 오버레이

플래트닝 후 스탬프나 워터마크를 추가하려면 플래트닝과 오버레이를 결합합니다:

doc, _ := gpdf.Open(filledFormPDF)

// 1단계: 폼 필드 플래트닝
doc.FlattenForms()

// 2단계: "PROCESSED" 스탬프 추가
doc.Overlay(0, func(p *template.PageBuilder) {
    p.Absolute(document.Mm(130), document.Mm(15), func(c *template.ColBuilder) {
        c.Text("PROCESSED",
            template.FontSize(24),
            template.Bold(),
            template.TextColor(pdf.RGB(0, 0.5, 0)),
        )
    })
})

result, _ := doc.Save()

API 레퍼런스

메서드설명
doc.FlattenForms()모든 AcroForm 필드를 정적 페이지 콘텐츠로 플래트닝

다음 단계