表单扁平化
概述
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 字段扁平化为静态页面内容 |