Achatamento de formularios
Visao Geral
Since v1.0.4O gpdf pode achatar campos AcroForm interativos (campos de texto, caixas de selecao, botoes de radio, etc.) em conteudo de pagina estatico. Apos o achatamento, os campos do formulario nao sao mais editaveis — sua aparencia visual e incorporada na pagina.
Casos de uso comuns:
- Arquivar formularios preenchidos como documentos estaticos
- Impedir edicoes adicionais em formularios enviados
- Preparar formularios para impressao ou distribuicao
- Converter PDFs interativos em PDFs estaticos
Achatamento Basico
Use FlattenForms() em um documento existente aberto com gpdf.Open():
import gpdf "github.com/gpdf-dev/gpdf"
// Ler um PDF com campos de formulario preenchidos
pdfBytes, _ := os.ReadFile("filled-form.pdf")
doc, err := gpdf.Open(pdfBytes)
if err != nil {
log.Fatal(err)
}
// Achatar todos os campos de formulario em conteudo estatico
if err := doc.FlattenForms(); err != nil {
log.Fatal(err)
}
result, _ := doc.Save()
os.WriteFile("flattened.pdf", result, 0644)
O Que e Achatado
FlattenForms() processa todas as anotacoes widget (widgets de campos de formulario) que possuem fluxos de aparencia:
- Campos de texto (
Tx) — o texto inserido e renderizado como conteudo estatico - Caixas de selecao e botoes de radio (
Btn) — o estado selecionado e renderizado - Outros tipos de widget — qualquer widget com um fluxo de aparencia (dicionario
/AP)
O Que e Preservado
Anotacoes que nao sao widget nao sao removidas:
- Anotacoes de link (hyperlinks)
- Anotacoes de texto (comentarios, notas adesivas)
- Outras anotacoes que nao sao de formulario
Seguro para Chamar em Qualquer PDF
Se o PDF nao possui campos AcroForm, FlattenForms() e um no-op e retorna nil:
doc, _ := gpdf.Open(regularPDFBytes)
// Seguro — nao faz nada se nao existem formularios
if err := doc.FlattenForms(); err != nil {
log.Fatal(err)
}
result, _ := doc.Save()
Achatamento + Sobreposicao
Combine achatamento com overlay para adicionar carimbos ou marcas d'agua apos o achatamento:
doc, _ := gpdf.Open(filledFormPDF)
// Passo 1: Achatar campos de formulario
doc.FlattenForms()
// Passo 2: Adicionar um carimbo "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()
Referencia da API
| Metodo | Descricao |
|---|---|
doc.FlattenForms() | Achatar todos os campos AcroForm em conteudo de pagina estatico |
Proximos Passos
- Overlay de PDF Existente — Adicionar conteudo sobre PDFs existentes
- Seguranca — Criptografia, PDF/A e assinaturas digitais
- Referencia da API — Referencia completa do pacote
gpdf