Deze gelokaliseerde versie behandelt Building AcroForm Fields and Actions with HotPDF in Delphi en gebruikt het bijgewerkte Engelse basisartikel als technische referentie voor teams rond Delphi, PDF en documentsoftware
De pagina zet de bijgewerkte basis om in concrete controlepunten voor ontwerp, implementatie en validatie
Wat uit de Engelse basis is gesynchroniseerd
Het basisartikel is uitgebreid met praktische context, technische keuzes en concrete voorbeelden, zodat deze pagina als werkgids dient en niet als korte samenvatting
Belangrijke punten in de bijgewerkte versie:
- Gebruik eerst kleine reproduceerbare invoerbestanden
- Laat productnamen, API-namen, bestandsnamen en literal waarden ongewijzigd
- Bewaar validatoruitvoer en versiegegevens samen met het gegenereerde testbestand
Praktische implementatiekeuzes
Begin met het bestandstype, het verwachte resultaat en de foutstatus die de gebruiker moet zien. Koppel daarna elke API-aanroep aan een controleerbaar resultaat, zodat validatie, logging en support het klantenscenario kunnen reproduceren
- Gebruik eerst kleine reproduceerbare invoerbestanden
- Laat productnamen, API-namen, bestandsnamen en literal waarden ongewijzigd
- Bewaar validatoruitvoer en versiegegevens samen met het gegenereerde testbestand
Code en API-punten
Codevoorbeelden blijven ongewijzigd zodat ontwikkelaars ze direct kunnen vergelijken met Delphi-, C++Builder- en Lazarus/FPC-projecten
procedure BuildClaimForm(Pdf: THotPDF);
begin
// Page 1: applicant block
Pdf.CurrentPage.AddTextField('applicant.name', '', Rect(50, 700, 300, 722));
Pdf.CurrentPage.AddTextField('applicant.email', '', Rect(50, 660, 300, 682));
Pdf.CurrentPage.AddCheckBox('consent', 'Y', Rect(50, 620, 70, 640), False);
Pdf.CurrentPage.AddRadioButton('coverage', 'basic', Rect(50, 580, 70, 600), True);
Pdf.CurrentPage.AddRadioButton('coverage', 'full', Rect(90, 580, 110, 600), False);
Pdf.CurrentPage.AddComboBox('plan', 'Standard',
['Basic', 'Standard', 'Premium'], Rect(50, 540, 200, 565));
Pdf.AddPage; // CurrentPage now points at page 2
Pdf.CurrentPage.AddListBox('riders', 'None',
['None', 'Flood', 'Earthquake'], Rect(50, 500, 200, 600));
end;// Open a help page in the system browser
Pdf.CurrentPage.AddPushButtonWithAction('btnHelp', 'Help',
'https://www.example.com/claims-help', Rect(320, 700, 420, 730), baURI);
// Run viewer-side JavaScript
Pdf.CurrentPage.AddPushButtonWithAction('btnRecalc', 'Recalculate',
'app.alert("Totals updated.");', Rect(320, 660, 420, 690), baJavaScript);
// Submit as XFDF and keep empty fields in the payload
Pdf.CurrentPage.AddPushButtonWithSubmitAction('btnSubmit', 'Submit claim',
'https://api.example.com/claims', Rect(320, 620, 420, 650),
[sffXFDF, sffIncludeNoValueFields]);// Reject committed values that are not plausible email addresses
Pdf.AttachFieldKeyStrokeAction('applicant.email',
'if (event.willCommit && !/^[\w.-]+@[\w.-]+\.\w+$/.test(event.value)) event.rc = false;');
// Display US phone numbers as (NNN) NNN-NNNN
Pdf.AttachFieldFormatAction('applicant.phone',
'event.value = event.value.replace(/(\d{3})(\d{3})(\d{4})/, "($1) $2-$3");');
// Refuse applicants under 18 at commit time
Pdf.AttachFieldValidateAction('applicant.age',
'if (parseInt(event.value) < 18) event.rc = false;');Controle vóór publicatie
Controleer het uitvoerbestand met dezelfde tools die de klant of het archief gebruikt. Noteer componentversie, testgegevens, validatorversie en waargenomen resultaat