[{"data":1,"prerenderedAt":879},["ShallowReactive",2],{"docs-zh-guide/flatten":3},{"id":4,"title":5,"body":6,"description":872,"extension":873,"meta":874,"navigation":93,"path":875,"seo":876,"stem":877,"__hash__":878},"docsZh/zh/docs/2.guide/10.flatten.md","表单扁平化",{"type":7,"value":8,"toc":862},"minimark",[9,13,17,21,24,40,43,55,333,336,341,373,376,383,394,398,407,508,512,515,794,798,828,831,858],[10,11,12],"h2",{"id":12},"概述",[14,15],"version-badge",{"version":16},"1.0.4",[18,19,20],"p",{},"gpdf 可以将交互式 AcroForm 字段（文本字段、复选框、单选按钮等）扁平化为静态页面内容。扁平化后，表单字段不再可编辑——其视觉外观会直接嵌入页面中。",[18,22,23],{},"常见用例：",[25,26,27,31,34,37],"ul",{},[28,29,30],"li",{},"将已填写的表单归档为静态文档",[28,32,33],{},"防止对已提交的表单进行进一步编辑",[28,35,36],{},"准备用于打印或分发的表单",[28,38,39],{},"将交互式 PDF 转换为静态 PDF",[10,41,42],{"id":42},"基本扁平化",[18,44,45,46,50,51,54],{},"在使用 ",[47,48,49],"code",{},"gpdf.Open()"," 打开的已有文档上调用 ",[47,52,53],{},"FlattenForms()","：",[56,57,62],"pre",{"className":58,"code":59,"language":60,"meta":61,"style":61},"language-go shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import gpdf \"github.com/gpdf-dev/gpdf\"\n\n// 读取包含已填写表单字段的 PDF\npdfBytes, _ := os.ReadFile(\"filled-form.pdf\")\n\ndoc, err := gpdf.Open(pdfBytes)\nif err != nil {\n    log.Fatal(err)\n}\n\n// 将所有表单字段扁平化为静态内容\nif err := doc.FlattenForms(); err != nil {\n    log.Fatal(err)\n}\n\nresult, _ := doc.Save()\nos.WriteFile(\"flattened.pdf\", result, 0644)\n","go","",[47,63,64,88,95,102,141,146,173,190,208,214,219,225,253,268,273,278,300],{"__ignoreMap":61},[65,66,69,73,77,81,85],"span",{"class":67,"line":68},"line",1,[65,70,72],{"class":71},"s7zQu","import",[65,74,76],{"class":75},"sTEyZ"," gpdf ",[65,78,80],{"class":79},"sMK4o","\"",[65,82,84],{"class":83},"sBMFI","github.com/gpdf-dev/gpdf",[65,86,87],{"class":79},"\"\n",[65,89,91],{"class":67,"line":90},2,[65,92,94],{"emptyLinePlaceholder":93},true,"\n",[65,96,98],{"class":67,"line":97},3,[65,99,101],{"class":100},"sHwdD","// 读取包含已填写表单字段的 PDF\n",[65,103,105,108,111,114,117,120,123,127,130,132,136,138],{"class":67,"line":104},4,[65,106,107],{"class":75},"pdfBytes",[65,109,110],{"class":79},",",[65,112,113],{"class":75}," _ ",[65,115,116],{"class":79},":=",[65,118,119],{"class":75}," os",[65,121,122],{"class":79},".",[65,124,126],{"class":125},"s2Zo4","ReadFile",[65,128,129],{"class":79},"(",[65,131,80],{"class":79},[65,133,135],{"class":134},"sfazB","filled-form.pdf",[65,137,80],{"class":79},[65,139,140],{"class":79},")\n",[65,142,144],{"class":67,"line":143},5,[65,145,94],{"emptyLinePlaceholder":93},[65,147,149,152,154,157,159,162,164,167,169,171],{"class":67,"line":148},6,[65,150,151],{"class":75},"doc",[65,153,110],{"class":79},[65,155,156],{"class":75}," err ",[65,158,116],{"class":79},[65,160,161],{"class":75}," gpdf",[65,163,122],{"class":79},[65,165,166],{"class":125},"Open",[65,168,129],{"class":79},[65,170,107],{"class":75},[65,172,140],{"class":79},[65,174,176,179,181,184,187],{"class":67,"line":175},7,[65,177,178],{"class":71},"if",[65,180,156],{"class":75},[65,182,183],{"class":79},"!=",[65,185,186],{"class":79}," nil",[65,188,189],{"class":79}," {\n",[65,191,193,196,198,201,203,206],{"class":67,"line":192},8,[65,194,195],{"class":75},"    log",[65,197,122],{"class":79},[65,199,200],{"class":125},"Fatal",[65,202,129],{"class":79},[65,204,205],{"class":75},"err",[65,207,140],{"class":79},[65,209,211],{"class":67,"line":210},9,[65,212,213],{"class":79},"}\n",[65,215,217],{"class":67,"line":216},10,[65,218,94],{"emptyLinePlaceholder":93},[65,220,222],{"class":67,"line":221},11,[65,223,224],{"class":100},"// 将所有表单字段扁平化为静态内容\n",[65,226,228,230,232,234,237,239,242,245,247,249,251],{"class":67,"line":227},12,[65,229,178],{"class":71},[65,231,156],{"class":75},[65,233,116],{"class":79},[65,235,236],{"class":75}," doc",[65,238,122],{"class":79},[65,240,241],{"class":125},"FlattenForms",[65,243,244],{"class":79},"();",[65,246,156],{"class":75},[65,248,183],{"class":79},[65,250,186],{"class":79},[65,252,189],{"class":79},[65,254,256,258,260,262,264,266],{"class":67,"line":255},13,[65,257,195],{"class":75},[65,259,122],{"class":79},[65,261,200],{"class":125},[65,263,129],{"class":79},[65,265,205],{"class":75},[65,267,140],{"class":79},[65,269,271],{"class":67,"line":270},14,[65,272,213],{"class":79},[65,274,276],{"class":67,"line":275},15,[65,277,94],{"emptyLinePlaceholder":93},[65,279,281,284,286,288,290,292,294,297],{"class":67,"line":280},16,[65,282,283],{"class":75},"result",[65,285,110],{"class":79},[65,287,113],{"class":75},[65,289,116],{"class":79},[65,291,236],{"class":75},[65,293,122],{"class":79},[65,295,296],{"class":125},"Save",[65,298,299],{"class":79},"()\n",[65,301,303,306,308,311,313,315,318,320,322,325,327,331],{"class":67,"line":302},17,[65,304,305],{"class":75},"os",[65,307,122],{"class":79},[65,309,310],{"class":125},"WriteFile",[65,312,129],{"class":79},[65,314,80],{"class":79},[65,316,317],{"class":134},"flattened.pdf",[65,319,80],{"class":79},[65,321,110],{"class":79},[65,323,324],{"class":75}," result",[65,326,110],{"class":79},[65,328,330],{"class":329},"sbssI"," 0644",[65,332,140],{"class":79},[10,334,335],{"id":335},"扁平化的内容",[18,337,338,340],{},[47,339,53],{}," 处理所有具有外观流的控件注释（表单字段控件）：",[25,342,343,354,363],{},[28,344,345,349,350,353],{},[346,347,348],"strong",{},"文本字段"," (",[47,351,352],{},"Tx",") — 输入的文本渲染为静态内容",[28,355,356,349,359,362],{},[346,357,358],{},"复选框和单选按钮",[47,360,361],{},"Btn",") — 选中状态被渲染",[28,364,365,368,369,372],{},[346,366,367],{},"其他控件类型"," — 任何具有外观流（",[47,370,371],{},"/AP"," 字典）的控件",[10,374,375],{"id":375},"保留的内容",[18,377,378,379,382],{},"非控件注释",[346,380,381],{},"不会","被删除：",[25,384,385,388,391],{},[28,386,387],{},"链接注释（超链接）",[28,389,390],{},"文本注释（批注、便签）",[28,392,393],{},"其他非表单注释",[10,395,397],{"id":396},"可在任何-pdf-上安全调用","可在任何 PDF 上安全调用",[18,399,400,401,403,404,54],{},"如果 PDF 没有 AcroForm 字段，",[47,402,53],{}," 不执行任何操作并返回 ",[47,405,406],{},"nil",[56,408,410],{"className":58,"code":409,"language":60,"meta":61,"style":61},"doc, _ := gpdf.Open(regularPDFBytes)\n\n// 安全调用——如果没有表单则不执行任何操作\nif err := doc.FlattenForms(); err != nil {\n    log.Fatal(err)\n}\n\nresult, _ := doc.Save()\n",[47,411,412,435,439,444,468,482,486,490],{"__ignoreMap":61},[65,413,414,416,418,420,422,424,426,428,430,433],{"class":67,"line":68},[65,415,151],{"class":75},[65,417,110],{"class":79},[65,419,113],{"class":75},[65,421,116],{"class":79},[65,423,161],{"class":75},[65,425,122],{"class":79},[65,427,166],{"class":125},[65,429,129],{"class":79},[65,431,432],{"class":75},"regularPDFBytes",[65,434,140],{"class":79},[65,436,437],{"class":67,"line":90},[65,438,94],{"emptyLinePlaceholder":93},[65,440,441],{"class":67,"line":97},[65,442,443],{"class":100},"// 安全调用——如果没有表单则不执行任何操作\n",[65,445,446,448,450,452,454,456,458,460,462,464,466],{"class":67,"line":104},[65,447,178],{"class":71},[65,449,156],{"class":75},[65,451,116],{"class":79},[65,453,236],{"class":75},[65,455,122],{"class":79},[65,457,241],{"class":125},[65,459,244],{"class":79},[65,461,156],{"class":75},[65,463,183],{"class":79},[65,465,186],{"class":79},[65,467,189],{"class":79},[65,469,470,472,474,476,478,480],{"class":67,"line":143},[65,471,195],{"class":75},[65,473,122],{"class":79},[65,475,200],{"class":125},[65,477,129],{"class":79},[65,479,205],{"class":75},[65,481,140],{"class":79},[65,483,484],{"class":67,"line":148},[65,485,213],{"class":79},[65,487,488],{"class":67,"line":175},[65,489,94],{"emptyLinePlaceholder":93},[65,491,492,494,496,498,500,502,504,506],{"class":67,"line":192},[65,493,283],{"class":75},[65,495,110],{"class":79},[65,497,113],{"class":75},[65,499,116],{"class":79},[65,501,236],{"class":75},[65,503,122],{"class":79},[65,505,296],{"class":125},[65,507,299],{"class":79},[10,509,511],{"id":510},"扁平化-叠加","扁平化 + 叠加",[18,513,514],{},"将扁平化与叠加结合使用，在扁平化后添加印章或水印：",[56,516,518],{"className":58,"code":517,"language":60,"meta":61,"style":61},"doc, _ := gpdf.Open(filledFormPDF)\n\n// 步骤 1：扁平化表单字段\ndoc.FlattenForms()\n\n// 步骤 2：添加 \"PROCESSED\" 印章\ndoc.Overlay(0, func(p *template.PageBuilder) {\n    p.Absolute(document.Mm(130), document.Mm(15), func(c *template.ColBuilder) {\n        c.Text(\"PROCESSED\",\n            template.FontSize(24),\n            template.Bold(),\n            template.TextColor(pdf.RGB(0, 0.5, 0)),\n        )\n    })\n})\n\nresult, _ := doc.Save()\n",[47,519,520,543,547,552,562,566,571,609,669,691,709,721,757,762,767,772,776],{"__ignoreMap":61},[65,521,522,524,526,528,530,532,534,536,538,541],{"class":67,"line":68},[65,523,151],{"class":75},[65,525,110],{"class":79},[65,527,113],{"class":75},[65,529,116],{"class":79},[65,531,161],{"class":75},[65,533,122],{"class":79},[65,535,166],{"class":125},[65,537,129],{"class":79},[65,539,540],{"class":75},"filledFormPDF",[65,542,140],{"class":79},[65,544,545],{"class":67,"line":90},[65,546,94],{"emptyLinePlaceholder":93},[65,548,549],{"class":67,"line":97},[65,550,551],{"class":100},"// 步骤 1：扁平化表单字段\n",[65,553,554,556,558,560],{"class":67,"line":104},[65,555,151],{"class":75},[65,557,122],{"class":79},[65,559,241],{"class":125},[65,561,299],{"class":79},[65,563,564],{"class":67,"line":143},[65,565,94],{"emptyLinePlaceholder":93},[65,567,568],{"class":67,"line":148},[65,569,570],{"class":100},"// 步骤 2：添加 \"PROCESSED\" 印章\n",[65,572,573,575,577,580,582,585,587,590,593,596,599,601,604,607],{"class":67,"line":175},[65,574,151],{"class":75},[65,576,122],{"class":79},[65,578,579],{"class":125},"Overlay",[65,581,129],{"class":79},[65,583,584],{"class":329},"0",[65,586,110],{"class":79},[65,588,589],{"class":79}," func(",[65,591,18],{"class":592},"sHdIc",[65,594,595],{"class":79}," *",[65,597,598],{"class":83},"template",[65,600,122],{"class":79},[65,602,603],{"class":83},"PageBuilder",[65,605,606],{"class":79},")",[65,608,189],{"class":79},[65,610,611,614,616,619,621,624,626,629,631,634,637,640,642,644,646,649,651,653,656,658,660,662,665,667],{"class":67,"line":192},[65,612,613],{"class":75},"    p",[65,615,122],{"class":79},[65,617,618],{"class":125},"Absolute",[65,620,129],{"class":79},[65,622,623],{"class":75},"document",[65,625,122],{"class":79},[65,627,628],{"class":125},"Mm",[65,630,129],{"class":79},[65,632,633],{"class":329},"130",[65,635,636],{"class":79},"),",[65,638,639],{"class":75}," document",[65,641,122],{"class":79},[65,643,628],{"class":125},[65,645,129],{"class":79},[65,647,648],{"class":329},"15",[65,650,636],{"class":79},[65,652,589],{"class":79},[65,654,655],{"class":592},"c",[65,657,595],{"class":79},[65,659,598],{"class":83},[65,661,122],{"class":79},[65,663,664],{"class":83},"ColBuilder",[65,666,606],{"class":79},[65,668,189],{"class":79},[65,670,671,674,676,679,681,683,686,688],{"class":67,"line":210},[65,672,673],{"class":75},"        c",[65,675,122],{"class":79},[65,677,678],{"class":125},"Text",[65,680,129],{"class":79},[65,682,80],{"class":79},[65,684,685],{"class":134},"PROCESSED",[65,687,80],{"class":79},[65,689,690],{"class":79},",\n",[65,692,693,696,698,701,703,706],{"class":67,"line":216},[65,694,695],{"class":75},"            template",[65,697,122],{"class":79},[65,699,700],{"class":125},"FontSize",[65,702,129],{"class":79},[65,704,705],{"class":329},"24",[65,707,708],{"class":79},"),\n",[65,710,711,713,715,718],{"class":67,"line":221},[65,712,695],{"class":75},[65,714,122],{"class":79},[65,716,717],{"class":125},"Bold",[65,719,720],{"class":79},"(),\n",[65,722,723,725,727,730,732,735,737,740,742,744,746,749,751,754],{"class":67,"line":227},[65,724,695],{"class":75},[65,726,122],{"class":79},[65,728,729],{"class":125},"TextColor",[65,731,129],{"class":79},[65,733,734],{"class":75},"pdf",[65,736,122],{"class":79},[65,738,739],{"class":125},"RGB",[65,741,129],{"class":79},[65,743,584],{"class":329},[65,745,110],{"class":79},[65,747,748],{"class":329}," 0.5",[65,750,110],{"class":79},[65,752,753],{"class":329}," 0",[65,755,756],{"class":79},")),\n",[65,758,759],{"class":67,"line":255},[65,760,761],{"class":79},"        )\n",[65,763,764],{"class":67,"line":270},[65,765,766],{"class":79},"    })\n",[65,768,769],{"class":67,"line":275},[65,770,771],{"class":79},"})\n",[65,773,774],{"class":67,"line":280},[65,775,94],{"emptyLinePlaceholder":93},[65,777,778,780,782,784,786,788,790,792],{"class":67,"line":302},[65,779,283],{"class":75},[65,781,110],{"class":79},[65,783,113],{"class":75},[65,785,116],{"class":79},[65,787,236],{"class":75},[65,789,122],{"class":79},[65,791,296],{"class":125},[65,793,299],{"class":79},[10,795,797],{"id":796},"api-参考","API 参考",[799,800,801,814],"table",{},[802,803,804],"thead",{},[805,806,807,811],"tr",{},[808,809,810],"th",{},"方法",[808,812,813],{},"说明",[815,816,817],"tbody",{},[805,818,819,825],{},[820,821,822],"td",{},[47,823,824],{},"doc.FlattenForms()",[820,826,827],{},"将所有 AcroForm 字段扁平化为静态页面内容",[10,829,830],{"id":830},"下一步",[25,832,833,841,848],{},[28,834,835,840],{},[836,837,839],"a",{"href":838},"/zh/docs/guide/overlay","已有 PDF 叠加"," — 在已有 PDF 上添加内容",[28,842,843,847],{},[836,844,846],{"href":845},"/zh/docs/guide/security","安全"," — 加密、PDF/A 和数字签名",[28,849,850,853,854,857],{},[836,851,797],{"href":852},"/zh/docs/api-reference/gpdf"," — 完整的 ",[47,855,856],{},"gpdf"," 包参考",[859,860,861],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":61,"searchDepth":90,"depth":90,"links":863},[864,865,866,867,868,869,870,871],{"id":12,"depth":90,"text":12},{"id":42,"depth":90,"text":42},{"id":335,"depth":90,"text":335},{"id":375,"depth":90,"text":375},{"id":396,"depth":90,"text":397},{"id":510,"depth":90,"text":511},{"id":796,"depth":90,"text":797},{"id":830,"depth":90,"text":830},"将 AcroForm 字段扁平化为静态页面内容","md",{},"/zh/docs/guide/flatten",{"title":5,"description":872},"zh/docs/2.guide/10.flatten","dq5p3fy0KxgY_bgOSDhV-qeMEHGj-gTWShtttvZ79BI",1776529282837]