[{"data":1,"prerenderedAt":884},["ShallowReactive",2],{"docs-en-guide/flatten":3},{"id":4,"title":5,"body":6,"description":877,"extension":878,"meta":879,"navigation":95,"path":880,"seo":881,"stem":882,"__hash__":883},"docs/docs/2.guide/10.flatten.md","Form Flattening",{"type":7,"value":8,"toc":867},"minimark",[9,14,18,22,25,41,45,57,335,339,344,376,380,387,398,402,411,512,516,519,798,802,832,836,863],[10,11,13],"h2",{"id":12},"overview","Overview",[15,16],"version-badge",{"version":17},"1.0.4",[19,20,21],"p",{},"gpdf can flatten interactive AcroForm fields (text fields, checkboxes, radio buttons, etc.) into static page content. After flattening, the form fields are no longer editable — their visual appearance is baked into the page.",[19,23,24],{},"Common use cases:",[26,27,28,32,35,38],"ul",{},[29,30,31],"li",{},"Archiving filled forms as static documents",[29,33,34],{},"Preventing further edits to submitted forms",[29,36,37],{},"Preparing forms for printing or distribution",[29,39,40],{},"Converting interactive PDFs to static PDFs",[10,42,44],{"id":43},"basic-flattening","Basic Flattening",[19,46,47,48,52,53,56],{},"Use ",[49,50,51],"code",{},"FlattenForms()"," on an existing document opened with ",[49,54,55],{},"gpdf.Open()",":",[58,59,64],"pre",{"className":60,"code":61,"language":62,"meta":63,"style":63},"language-go shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import gpdf \"github.com/gpdf-dev/gpdf\"\n\n// Read a PDF with filled form fields\npdfBytes, _ := os.ReadFile(\"filled-form.pdf\")\n\ndoc, err := gpdf.Open(pdfBytes)\nif err != nil {\n    log.Fatal(err)\n}\n\n// Flatten all form fields into static content\nif err := doc.FlattenForms(); err != nil {\n    log.Fatal(err)\n}\n\nresult, _ := doc.Save()\nos.WriteFile(\"flattened.pdf\", result, 0644)\n","go","",[49,65,66,90,97,104,143,148,175,192,210,216,221,227,255,270,275,280,302],{"__ignoreMap":63},[67,68,71,75,79,83,87],"span",{"class":69,"line":70},"line",1,[67,72,74],{"class":73},"s7zQu","import",[67,76,78],{"class":77},"sTEyZ"," gpdf ",[67,80,82],{"class":81},"sMK4o","\"",[67,84,86],{"class":85},"sBMFI","github.com/gpdf-dev/gpdf",[67,88,89],{"class":81},"\"\n",[67,91,93],{"class":69,"line":92},2,[67,94,96],{"emptyLinePlaceholder":95},true,"\n",[67,98,100],{"class":69,"line":99},3,[67,101,103],{"class":102},"sHwdD","// Read a PDF with filled form fields\n",[67,105,107,110,113,116,119,122,125,129,132,134,138,140],{"class":69,"line":106},4,[67,108,109],{"class":77},"pdfBytes",[67,111,112],{"class":81},",",[67,114,115],{"class":77}," _ ",[67,117,118],{"class":81},":=",[67,120,121],{"class":77}," os",[67,123,124],{"class":81},".",[67,126,128],{"class":127},"s2Zo4","ReadFile",[67,130,131],{"class":81},"(",[67,133,82],{"class":81},[67,135,137],{"class":136},"sfazB","filled-form.pdf",[67,139,82],{"class":81},[67,141,142],{"class":81},")\n",[67,144,146],{"class":69,"line":145},5,[67,147,96],{"emptyLinePlaceholder":95},[67,149,151,154,156,159,161,164,166,169,171,173],{"class":69,"line":150},6,[67,152,153],{"class":77},"doc",[67,155,112],{"class":81},[67,157,158],{"class":77}," err ",[67,160,118],{"class":81},[67,162,163],{"class":77}," gpdf",[67,165,124],{"class":81},[67,167,168],{"class":127},"Open",[67,170,131],{"class":81},[67,172,109],{"class":77},[67,174,142],{"class":81},[67,176,178,181,183,186,189],{"class":69,"line":177},7,[67,179,180],{"class":73},"if",[67,182,158],{"class":77},[67,184,185],{"class":81},"!=",[67,187,188],{"class":81}," nil",[67,190,191],{"class":81}," {\n",[67,193,195,198,200,203,205,208],{"class":69,"line":194},8,[67,196,197],{"class":77},"    log",[67,199,124],{"class":81},[67,201,202],{"class":127},"Fatal",[67,204,131],{"class":81},[67,206,207],{"class":77},"err",[67,209,142],{"class":81},[67,211,213],{"class":69,"line":212},9,[67,214,215],{"class":81},"}\n",[67,217,219],{"class":69,"line":218},10,[67,220,96],{"emptyLinePlaceholder":95},[67,222,224],{"class":69,"line":223},11,[67,225,226],{"class":102},"// Flatten all form fields into static content\n",[67,228,230,232,234,236,239,241,244,247,249,251,253],{"class":69,"line":229},12,[67,231,180],{"class":73},[67,233,158],{"class":77},[67,235,118],{"class":81},[67,237,238],{"class":77}," doc",[67,240,124],{"class":81},[67,242,243],{"class":127},"FlattenForms",[67,245,246],{"class":81},"();",[67,248,158],{"class":77},[67,250,185],{"class":81},[67,252,188],{"class":81},[67,254,191],{"class":81},[67,256,258,260,262,264,266,268],{"class":69,"line":257},13,[67,259,197],{"class":77},[67,261,124],{"class":81},[67,263,202],{"class":127},[67,265,131],{"class":81},[67,267,207],{"class":77},[67,269,142],{"class":81},[67,271,273],{"class":69,"line":272},14,[67,274,215],{"class":81},[67,276,278],{"class":69,"line":277},15,[67,279,96],{"emptyLinePlaceholder":95},[67,281,283,286,288,290,292,294,296,299],{"class":69,"line":282},16,[67,284,285],{"class":77},"result",[67,287,112],{"class":81},[67,289,115],{"class":77},[67,291,118],{"class":81},[67,293,238],{"class":77},[67,295,124],{"class":81},[67,297,298],{"class":127},"Save",[67,300,301],{"class":81},"()\n",[67,303,305,308,310,313,315,317,320,322,324,327,329,333],{"class":69,"line":304},17,[67,306,307],{"class":77},"os",[67,309,124],{"class":81},[67,311,312],{"class":127},"WriteFile",[67,314,131],{"class":81},[67,316,82],{"class":81},[67,318,319],{"class":136},"flattened.pdf",[67,321,82],{"class":81},[67,323,112],{"class":81},[67,325,326],{"class":77}," result",[67,328,112],{"class":81},[67,330,332],{"class":331},"sbssI"," 0644",[67,334,142],{"class":81},[10,336,338],{"id":337},"what-gets-flattened","What Gets Flattened",[19,340,341,343],{},[49,342,51],{}," processes all widget annotations (form field widgets) that have appearance streams:",[26,345,346,357,366],{},[29,347,348,352,353,356],{},[349,350,351],"strong",{},"Text fields"," (",[49,354,355],{},"Tx",") — the entered text is rendered as static content",[29,358,359,352,362,365],{},[349,360,361],{},"Checkboxes and radio buttons",[49,363,364],{},"Btn",") — the selected state is rendered",[29,367,368,371,372,375],{},[349,369,370],{},"Other widget types"," — any widget with an appearance stream (",[49,373,374],{},"/AP"," dictionary)",[10,377,379],{"id":378},"what-gets-preserved","What Gets Preserved",[19,381,382,383,386],{},"Non-widget annotations are ",[349,384,385],{},"not"," removed:",[26,388,389,392,395],{},[29,390,391],{},"Link annotations (hyperlinks)",[29,393,394],{},"Text annotations (comments, sticky notes)",[29,396,397],{},"Other non-form annotations",[10,399,401],{"id":400},"safe-to-call-on-any-pdf","Safe to Call on Any PDF",[19,403,404,405,407,408,56],{},"If the PDF has no AcroForm fields, ",[49,406,51],{}," is a no-op and returns ",[49,409,410],{},"nil",[58,412,414],{"className":60,"code":413,"language":62,"meta":63,"style":63},"doc, _ := gpdf.Open(regularPDFBytes)\n\n// Safe — does nothing if no forms exist\nif err := doc.FlattenForms(); err != nil {\n    log.Fatal(err)\n}\n\nresult, _ := doc.Save()\n",[49,415,416,439,443,448,472,486,490,494],{"__ignoreMap":63},[67,417,418,420,422,424,426,428,430,432,434,437],{"class":69,"line":70},[67,419,153],{"class":77},[67,421,112],{"class":81},[67,423,115],{"class":77},[67,425,118],{"class":81},[67,427,163],{"class":77},[67,429,124],{"class":81},[67,431,168],{"class":127},[67,433,131],{"class":81},[67,435,436],{"class":77},"regularPDFBytes",[67,438,142],{"class":81},[67,440,441],{"class":69,"line":92},[67,442,96],{"emptyLinePlaceholder":95},[67,444,445],{"class":69,"line":99},[67,446,447],{"class":102},"// Safe — does nothing if no forms exist\n",[67,449,450,452,454,456,458,460,462,464,466,468,470],{"class":69,"line":106},[67,451,180],{"class":73},[67,453,158],{"class":77},[67,455,118],{"class":81},[67,457,238],{"class":77},[67,459,124],{"class":81},[67,461,243],{"class":127},[67,463,246],{"class":81},[67,465,158],{"class":77},[67,467,185],{"class":81},[67,469,188],{"class":81},[67,471,191],{"class":81},[67,473,474,476,478,480,482,484],{"class":69,"line":145},[67,475,197],{"class":77},[67,477,124],{"class":81},[67,479,202],{"class":127},[67,481,131],{"class":81},[67,483,207],{"class":77},[67,485,142],{"class":81},[67,487,488],{"class":69,"line":150},[67,489,215],{"class":81},[67,491,492],{"class":69,"line":177},[67,493,96],{"emptyLinePlaceholder":95},[67,495,496,498,500,502,504,506,508,510],{"class":69,"line":194},[67,497,285],{"class":77},[67,499,112],{"class":81},[67,501,115],{"class":77},[67,503,118],{"class":81},[67,505,238],{"class":77},[67,507,124],{"class":81},[67,509,298],{"class":127},[67,511,301],{"class":81},[10,513,515],{"id":514},"flatten-overlay","Flatten + Overlay",[19,517,518],{},"Combine flattening with overlay to add stamps or watermarks after flattening:",[58,520,522],{"className":60,"code":521,"language":62,"meta":63,"style":63},"doc, _ := gpdf.Open(filledFormPDF)\n\n// Step 1: Flatten form fields\ndoc.FlattenForms()\n\n// Step 2: Add a \"PROCESSED\" stamp\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",[49,523,524,547,551,556,566,570,575,613,673,695,713,725,761,766,771,776,780],{"__ignoreMap":63},[67,525,526,528,530,532,534,536,538,540,542,545],{"class":69,"line":70},[67,527,153],{"class":77},[67,529,112],{"class":81},[67,531,115],{"class":77},[67,533,118],{"class":81},[67,535,163],{"class":77},[67,537,124],{"class":81},[67,539,168],{"class":127},[67,541,131],{"class":81},[67,543,544],{"class":77},"filledFormPDF",[67,546,142],{"class":81},[67,548,549],{"class":69,"line":92},[67,550,96],{"emptyLinePlaceholder":95},[67,552,553],{"class":69,"line":99},[67,554,555],{"class":102},"// Step 1: Flatten form fields\n",[67,557,558,560,562,564],{"class":69,"line":106},[67,559,153],{"class":77},[67,561,124],{"class":81},[67,563,243],{"class":127},[67,565,301],{"class":81},[67,567,568],{"class":69,"line":145},[67,569,96],{"emptyLinePlaceholder":95},[67,571,572],{"class":69,"line":150},[67,573,574],{"class":102},"// Step 2: Add a \"PROCESSED\" stamp\n",[67,576,577,579,581,584,586,589,591,594,597,600,603,605,608,611],{"class":69,"line":177},[67,578,153],{"class":77},[67,580,124],{"class":81},[67,582,583],{"class":127},"Overlay",[67,585,131],{"class":81},[67,587,588],{"class":331},"0",[67,590,112],{"class":81},[67,592,593],{"class":81}," func(",[67,595,19],{"class":596},"sHdIc",[67,598,599],{"class":81}," *",[67,601,602],{"class":85},"template",[67,604,124],{"class":81},[67,606,607],{"class":85},"PageBuilder",[67,609,610],{"class":81},")",[67,612,191],{"class":81},[67,614,615,618,620,623,625,628,630,633,635,638,641,644,646,648,650,653,655,657,660,662,664,666,669,671],{"class":69,"line":194},[67,616,617],{"class":77},"    p",[67,619,124],{"class":81},[67,621,622],{"class":127},"Absolute",[67,624,131],{"class":81},[67,626,627],{"class":77},"document",[67,629,124],{"class":81},[67,631,632],{"class":127},"Mm",[67,634,131],{"class":81},[67,636,637],{"class":331},"130",[67,639,640],{"class":81},"),",[67,642,643],{"class":77}," document",[67,645,124],{"class":81},[67,647,632],{"class":127},[67,649,131],{"class":81},[67,651,652],{"class":331},"15",[67,654,640],{"class":81},[67,656,593],{"class":81},[67,658,659],{"class":596},"c",[67,661,599],{"class":81},[67,663,602],{"class":85},[67,665,124],{"class":81},[67,667,668],{"class":85},"ColBuilder",[67,670,610],{"class":81},[67,672,191],{"class":81},[67,674,675,678,680,683,685,687,690,692],{"class":69,"line":212},[67,676,677],{"class":77},"        c",[67,679,124],{"class":81},[67,681,682],{"class":127},"Text",[67,684,131],{"class":81},[67,686,82],{"class":81},[67,688,689],{"class":136},"PROCESSED",[67,691,82],{"class":81},[67,693,694],{"class":81},",\n",[67,696,697,700,702,705,707,710],{"class":69,"line":218},[67,698,699],{"class":77},"            template",[67,701,124],{"class":81},[67,703,704],{"class":127},"FontSize",[67,706,131],{"class":81},[67,708,709],{"class":331},"24",[67,711,712],{"class":81},"),\n",[67,714,715,717,719,722],{"class":69,"line":223},[67,716,699],{"class":77},[67,718,124],{"class":81},[67,720,721],{"class":127},"Bold",[67,723,724],{"class":81},"(),\n",[67,726,727,729,731,734,736,739,741,744,746,748,750,753,755,758],{"class":69,"line":229},[67,728,699],{"class":77},[67,730,124],{"class":81},[67,732,733],{"class":127},"TextColor",[67,735,131],{"class":81},[67,737,738],{"class":77},"pdf",[67,740,124],{"class":81},[67,742,743],{"class":127},"RGB",[67,745,131],{"class":81},[67,747,588],{"class":331},[67,749,112],{"class":81},[67,751,752],{"class":331}," 0.5",[67,754,112],{"class":81},[67,756,757],{"class":331}," 0",[67,759,760],{"class":81},")),\n",[67,762,763],{"class":69,"line":257},[67,764,765],{"class":81},"        )\n",[67,767,768],{"class":69,"line":272},[67,769,770],{"class":81},"    })\n",[67,772,773],{"class":69,"line":277},[67,774,775],{"class":81},"})\n",[67,777,778],{"class":69,"line":282},[67,779,96],{"emptyLinePlaceholder":95},[67,781,782,784,786,788,790,792,794,796],{"class":69,"line":304},[67,783,285],{"class":77},[67,785,112],{"class":81},[67,787,115],{"class":77},[67,789,118],{"class":81},[67,791,238],{"class":77},[67,793,124],{"class":81},[67,795,298],{"class":127},[67,797,301],{"class":81},[10,799,801],{"id":800},"api-reference","API Reference",[803,804,805,818],"table",{},[806,807,808],"thead",{},[809,810,811,815],"tr",{},[812,813,814],"th",{},"Method",[812,816,817],{},"Description",[819,820,821],"tbody",{},[809,822,823,829],{},[824,825,826],"td",{},[49,827,828],{},"doc.FlattenForms()",[824,830,831],{},"Flatten all AcroForm fields into static page content",[10,833,835],{"id":834},"next-steps","Next Steps",[26,837,838,846,853],{},[29,839,840,845],{},[841,842,844],"a",{"href":843},"/docs/guide/overlay","Existing PDF Overlay"," — Add content on top of existing PDFs",[29,847,848,852],{},[841,849,851],{"href":850},"/docs/guide/security","Security"," — Encryption, PDF/A, and digital signatures",[29,854,855,858,859,862],{},[841,856,801],{"href":857},"/docs/api-reference/gpdf"," — Full ",[49,860,861],{},"gpdf"," package reference",[864,865,866],"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":63,"searchDepth":92,"depth":92,"links":868},[869,870,871,872,873,874,875,876],{"id":12,"depth":92,"text":13},{"id":43,"depth":92,"text":44},{"id":337,"depth":92,"text":338},{"id":378,"depth":92,"text":379},{"id":400,"depth":92,"text":401},{"id":514,"depth":92,"text":515},{"id":800,"depth":92,"text":801},{"id":834,"depth":92,"text":835},"Flatten AcroForm fields into static page content","md",{},"/docs/guide/flatten",{"title":5,"description":877},"docs/2.guide/10.flatten","2bOglEx5LlvlWRUfX6FoiMvo2QPM7HX7UtWQbpRFteE",1776526792779]