폼 플래트닝
개요
Since v1.0.4gpdf는 대화형 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 필드를 정적 페이지 콘텐츠로 플래트닝 |
다음 단계
- 기존 PDF 오버레이 — 기존 PDF 위에 콘텐츠 추가
- 보안 — 암호화, PDF/A, 디지털 서명
- API 레퍼런스 — 전체
gpdf패키지 레퍼런스