AcroForm Support

Overzicht

Sinds HotPDF v2.5.0 kan de bibliotheek interactieve formulieren (AcroForm) uitschrijven volgens PDF 1.7 ISO 32000-1 sectie 12.7. Elk formulierveld wordt aangemaakt als een Widget-annotatie versmolten met het veldwoordenboek en wordt automatisch bij het document geregistreerd, zodat de globale /AcroForm-invoer aan de Catalog wordt toegevoegd zodra het document in EndDoc wordt afgerond.

Ondersteunde veldtypes

  • Tekstvelden (/FT /Tx) via THPDFPage.AddTextField. Ondersteunt single-line-, multi-line-, password-, comb-, file-select-, rich-text-, scroll- en spell-check-opties via THPDFFormFieldFlags.
  • Checkboxes (/FT /Btn, zonder Pushbutton/Radio-bits) via THPDFPage.AddCheckBox met een configureerbare exportwaardenaam en initiële aangevinkt-status.
  • Radioknoppen (/FT /Btn /Ff Radio) via THPDFPage.AddRadioButton. Meerdere aanroepen met dezelfde groepsnaam worden samengevoegd onder een gedeeld ouderveld met een /Kids-array, precies zoals 12.7.4.2 voorschrijft.
  • Comboboxen (/FT /Ch /Ff Combo) via THPDFPage.AddComboBox. Geef een open array met opties mee.
  • Listboxen (/FT /Ch) via THPDFPage.AddListBox. ffMultiSelect zet multi-select aan.
  • Pushbuttons (/FT /Btn /Ff Pushbutton) via THPDFPage.AddPushButton met optioneel bijschrift (/MK /CA). Sinds HotPDF v2.31.0 koppelt THPDFPage.AddPushButtonWithAction een PDF-actiewoordenboek aan de widget, zodat een klik op de knop /SubmitForm (veldwaarden naar een URL posten, PDF 1.2 12.7.5.2), /ResetForm (PDF 1.2 12.7.5.3), /JavaScript (een JS-fragment uitvoeren, PDF 1.3 12.6.4.16) of /URI (een URL openen in de systeembrowser, PDF 1.1 12.6.4.7) uitvoert.
  • Signature-placeholder-velden (/FT /Sig) via THPDFPage.AddSignatureField sinds HotPDF v2.12.0. Het AcroForm-woordenboek krijgt automatisch /SigFlags 3 (SignaturesExist + AppendOnly) zodra er ten minste één signature-veld is. Het veld blijft bewust ongetekend, zodat externe tools (Adobe Acrobat, Foxit, gespecialiseerde CMS-/PKCS#7-signeerbibliotheken) na het opslaan van het bestand de echte cryptografische handtekening kunnen toevoegen.
  • In-place signing-workflow via THPDFPage.AddSignedSignatureField + THotPDF.PreparePDFForSigning + THotPDF.InsertSignatureHex sinds HotPDF v2.23.0. De eerste aanroep reserveert een /V-handtekeningwoordenboek met /ByteRange- en /Contents-placeholders. Nadat de toepassing het document heeft opgeslagen, roept ze PreparePDFForSigning aan om /ByteRange te patchen en te zien welke bestandsbereiken gehasht moeten worden. Na het extern produceren van een CMS-/PKCS#7-detached-signature (Windows CryptoAPI, OpenSSL, gespecialiseerde signeerbibliotheken) roept ze InsertSignatureHex aan om de handtekeninghex in de placeholder te zetten zonder ook maar één andere byte in het bestand te raken.

Field wrappers bij aanmaak

Sinds HotPDF v2.292.12 maken de helpers THPDFPage.CreateTextField, CreateCheckBox, CreateRadioButton, CreateComboBox en CreateListBox dezelfde AcroForm-widgets aan als de bestaande Add...-methoden en geven ze een lichtgewicht THPDFAcroFormField-wrapper terug voor directe configuratie

Sinds HotPDF v2.292.26 kent THotPDF.SetFormFieldTooltip de PDF-gebruikershint /TU toe op veldnaam voor velden die via de bestaande Add...-methoden zijn aangemaakt, gelijk aan de wrapper-workflow THPDFAcroFormField.SetTooltip

Sinds HotPDF v2.298.0 wijzen veld-API's bij aanmaak en veld-API's voor geladen documenten dubbele rootveldnamen af met een diagnostische exception voordat er ergens een widget wordt geregistreerd. Herhaalde AddRadioButton-aanroepen met dezelfde groepsnaam blijven geldig, omdat die één ouderveld delen en extra kindwidgets onder diens /Kids-array toevoegen

De wrapper stelt chainable setters beschikbaar voor /TU-tooltips, gangbare veldvlaggen (SetReadOnly, SetRequired, SetNoExport), /DA-default-appearance-strings, additional actions op veldniveau zoals /AA /K, /AA /F, /AA /V, /AA /C en widget-muis- of focusacties via THPDFActionBuilder

Pascal-voorbeeld van de aanmaak-wrapper

Field := HPDF.CurrentPage.CreateTextField('Email', '', Rect(50, 80, 250, 104)); Action := THPDFActionBuilder.JavaScript('event.rc = event.value.indexOf("@") > 0;'); try Field.SetTooltip('Email address'); Field.SetRequired(True); Field.SetReadOnly(False); Field.SetAdditionalAction(fatValidate, Action); finally Action.Free; Field.Free; end; 

Inspectie en bijwerking van geladen formuliervelden

Sinds HotPDF v2.121.9 kunnen toepassingen een bestaande AcroForm-PDF laden met THotPDF.LoadFromFile, de velden opsommen, hun namen, types en waarden lezen, veldwaarden wijzigen, de read-only-vlag omschakelen en de geladen objectgraaf opslaan met THotPDF.SaveLoadedDocument. Dit pad is bedoeld voor persistente bewerkingen van een al geladen document; roep BeginDoc / EndDoc niet aan alleen om geladen veldwaardewijzigingen op te slaan.

De veldhelpers zijn GetFormFieldCount, GetFormFieldName, GetFormFieldType, GetFormFieldValue, SetFormFieldValue en SetFormFieldReadOnly. Veldopzoeking accepteert een zero-based veldindex of de volledig gekwalificeerde veldnaam. De teruggegeven THPDFLoadedFormFieldType-waarden zijn lfftText, lfftButton, lfftChoice, lfftSignature of lfftUnknown.

Pascal-voorbeeld met geladen velden

HPDF.LoadFromFile('InputForm.pdf'); for I := 0 to HPDF.GetFormFieldCount - 1 do Writeln(HPDF.GetFormFieldName(I), ' = ', HPDF.GetFormFieldValue(I)); HPDF.SetFormFieldValue('CustomerName', 'Bob'); HPDF.SetFormFieldValue('Plan', 'Premium'); HPDF.SetFormFieldReadOnly('CustomerName', True); HPDF.SaveLoadedDocument('UpdatedForm.pdf'); 

Additional actions van velden

De wrappers AttachFieldKeyStrokeAction, AttachFieldFormatAction, AttachFieldValidateAction en AttachFieldCalculateAction koppelen JavaScript aan het /AA-woordenboek van een veld voor de PDF-triggers /K, /F, /V en /C. Gebruik SetFormFieldAdditionalAction of de benoemde THPDFActionBuilder-wrappers wanneer dezelfde trigger een herbruikbare actieketen moet uitvoeren, zoals JavaScript, ResetForm, SubmitForm, URI, Hide, ImportData of een geketende /Next-actie. Widget-muis- en focustriggers kunnen ook op veldnaam worden geïnstalleerd via SetFormFieldAnnotationAction en de benoemde mouse-/focus-helpers, terwijl de bijbehorende clear-helpers één trigger verwijderen zonder de rest van het /AA-woordenboek te raken

Appearance generation

Stuurt de bibliotheek standaard het /AcroForm-woordenboek uit met /NeedAppearances true en laat ze de appearance-stream-rendering over aan de afnemende viewer (Adobe Reader, Foxit, Chrome, browsers, Apple Preview). Zet THotPDF.AutoFormAppearances op true voordat je velden toevoegt, en HotPDF bouwt vooraf /AP /N Form XObjects (PDF 1.7 8.10) voor elk tekstveld, elke pushbutton, elke choice (combo/list) en de Yes-/ Off-statussen van elke checkbox-/radiokid. Het AcroForm-woordenboek draagt dan /NeedAppearances false en een /DR-default-resources-invoer die naar de standaard 14 basisfonts verwijst (Helv Helvetica, ZaDb ZapfDingbats), zodat renderers die /NeedAppearances negeren de veldinhoud toch correct tekenen. Beschikbaar sinds HotPDF v2.28.0.

Field flag reference (THPDFFormFieldFlags)

  • ffReadOnly, ffRequired, ffNoExport — gangbare Table 227-vlaggen die voor elk veldtype gelden.
  • ffMultiline, ffPassword, ffFileSelect, ffDoNotSpellCheck, ffDoNotScroll, ffComb, ffRichText — specifiek voor Tx (Table 228).
  • ffEdit, ffSort, ffMultiSelect, ffDoNotSpellCheck, ffCommitOnSelChange — specifiek voor Ch (Table 230).

Pascal-voorbeeld

HPDF.BeginDoc; HPDF.AddPage; HPDF.CurrentPage.AddTextField('Name', '', Rect(50, 100, 250, 120)); HPDF.SetFormFieldTooltip('Name', 'Customer name'); HPDF.CurrentPage.AddCheckBox('Agree', 'Yes', Rect(50, 130, 70, 145), True); HPDF.CurrentPage.AddRadioButton('Color', 'Red', Rect(50, 160, 70, 175), True); HPDF.CurrentPage.AddRadioButton('Color', 'Green', Rect(80, 160, 100, 175)); HPDF.CurrentPage.AddRadioButton('Color', 'Blue', Rect(110, 160, 130, 175)); HPDF.CurrentPage.AddComboBox('Country', 'CN', ['CN', 'US', 'JP'], Rect(50, 190, 250, 210)); HPDF.EndDoc; 

Limitations

  • De generator AutoFormAppearances legt momenteel alleen ASCII- / WinAnsi-codeerbare waarden uit; voor velden waarvan /V meerdere bytes (UTF-8) bevat, rendert de opgeslagen /AP een lege rechthoek totdat de afnemende viewer de weergave opnieuw genereert.
  • Down (/D)- en rollover (/R)-substatussen worden niet gegenereerd; alleen de normale (/N)-status wordt geproduceerd.
  • Veldnamen worden gecontroleerd op dubbele rootinvoeren wanneer nieuwe AcroForm-widgets worden aangemaakt; hiërarchische partname-constructie buiten het radio-ouder-/widgetpatroon blijft de verantwoordelijkheid van de aanroeper.

Zie ook