procedure GenerateFormAppearances;
GenerateFormAppearances bouwt de /AP-entry (appearance stream) opnieuw op voor elke AcroForm widget over alle pagina's van het geladen document. Dat gebeurt door elke pagina te renderen via de PDFium form-fill engine (FPDF_FFLDraw), waardoor de huidige fieldwaarden in de visuele representatie van de widget in het PDF-bestand worden ingebakken
Deze aanroep is een verplichte aanvulling op FormField[i] := value-toewijzingen. Zonder deze stap wordt een fieldwaarde wel in de data dictionary van de PDF opgeslagen, maar heeft die geen bijbehorende appearance stream. PDF-viewers tonen de waarde meestal alleen terwijl het field input focus heeft; andere viewers kunnen helemaal niets tonen. Nog belangrijker: elke aanroep van FlattenPage of FlattenAllPages zonder voorafgaande appearance-generatie produceert stilzwijgend output waarin de ingevulde waarden ontbreken
De juiste workflow bij het invullen en vergrendelen van een formulier is: wijs alle FormField[]-waarden toe → roep GenerateFormAppearances één keer aan → roep optioneel FlattenPage / FlattenAllPages aan → roep SaveAs aan. Als je alleen het ingevulde formulier wilt opslaan zonder te flattenen, blijft GenerateFormAppearances aanbevolen om maximale compatibiliteit met PDF-viewers van derden te waarborgen
De procedure werkt in één aanroep op het hele document; er is geen variant per pagina
begin
// Wijs form field values toe
Pdf1.FormField[0] := 'Alice Example';
Pdf1.FormField[1] := 'alice@example.com';
Pdf1.FormField[2] := '2026-05-20';
// Bak appearance streams in zodat waarden in alle viewers zichtbaar zijn
Pdf1.GenerateFormAppearances;
// Flatten en sla een niet-bewerkbare kopie op
Pdf1.FlattenAllPages;
Pdf1.SaveAs('output_filled_flat.pdf');
end;