Aplanamiento de formularios
Descripcion general
Since v1.0.4gpdf puede aplanar campos AcroForm interactivos (campos de texto, casillas de verificacion, botones de opcion, etc.) en contenido de pagina estatico. Despues del aplanamiento, los campos del formulario ya no son editables — su apariencia visual se integra en la pagina.
Casos de uso comunes:
- Archivar formularios completados como documentos estaticos
- Prevenir ediciones adicionales en formularios enviados
- Preparar formularios para impresion o distribucion
- Convertir PDFs interactivos en PDFs estaticos
Aplanamiento basico
Use FlattenForms() en un documento existente abierto con gpdf.Open():
import gpdf "github.com/gpdf-dev/gpdf"
// Leer un PDF con campos de formulario completados
pdfBytes, _ := os.ReadFile("filled-form.pdf")
doc, err := gpdf.Open(pdfBytes)
if err != nil {
log.Fatal(err)
}
// Aplanar todos los campos del formulario en contenido estatico
if err := doc.FlattenForms(); err != nil {
log.Fatal(err)
}
result, _ := doc.Save()
os.WriteFile("flattened.pdf", result, 0644)
Que se aplana
FlattenForms() procesa todas las anotaciones de widget (widgets de campos de formulario) que tienen flujos de apariencia:
- Campos de texto (
Tx) — el texto ingresado se renderiza como contenido estatico - Casillas de verificacion y botones de opcion (
Btn) — el estado seleccionado se renderiza - Otros tipos de widget — cualquier widget con un flujo de apariencia (diccionario
/AP)
Que se preserva
Las anotaciones que no son widgets no se eliminan:
- Anotaciones de enlace (hipervinculos)
- Anotaciones de texto (comentarios, notas adhesivas)
- Otras anotaciones que no son de formulario
Seguro para llamar en cualquier PDF
Si el PDF no tiene campos AcroForm, FlattenForms() es una operacion nula y devuelve nil:
doc, _ := gpdf.Open(regularPDFBytes)
// Seguro — no hace nada si no existen formularios
if err := doc.FlattenForms(); err != nil {
log.Fatal(err)
}
result, _ := doc.Save()
Aplanamiento + Superposicion
Combine el aplanamiento con la superposicion para agregar sellos o marcas de agua despues del aplanamiento:
doc, _ := gpdf.Open(filledFormPDF)
// Paso 1: Aplanar campos del formulario
doc.FlattenForms()
// Paso 2: Agregar un sello "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 de API
| Metodo | Descripcion |
|---|---|
doc.FlattenForms() | Aplanar todos los campos AcroForm en contenido de pagina estatico |
Proximos pasos
- Superposicion de PDF existente — Agregar contenido sobre PDFs existentes
- Seguridad — Encriptacion, PDF/A y firmas digitales
- Referencia de API — Referencia completa del paquete
gpdf