Supporto AcroForm Supporto AcroForm Supporto AcroForm

Supporto AcroForm

Panoramica

Dalla HotPDF v2.5.0 la libreria può emettere moduli interattivi (AcroForm) secondo PDF 1.7 ISO 32000-1 sezione 12.7. Ogni campo formulario viene creato come annotazione Widget fusa con il dizionario del campo ed è registrato automaticamente nel documento così il globale /AcroForm viene aggiunta al Catalog quando il documento viene finalizzato in EndDoc.

Tipi di campi supportati

  • Campi testo (/FT /Tx) via THPDFPage.AddTextField. Supporta opzioni a riga singola, multilinea, password, comb, selezione file, rich text, scorrimento e controllo ortografico tramite THPDFFormFieldFlags.
  • Check box (/FT /Btn, no Pushbutton/Radio bits) via THPDFPage.AddCheckBox with a configurable export value name and initial checked state.
  • Radio button (/FT /Btn /Ff Radio) via THPDFPage.AddRadioButton. Più chiamate con lo stesso nome di gruppo vengono fuse sotto un campo padre condiviso con un /Kids , esattamente come richiesto da 12.7.4.2.
  • Combo box (/FT /Ch /Ff Combo) via THPDFPage.AddComboBox. Passa un open array di opzioni.
  • List box (/FT /Ch) via THPDFPage.AddListBox. ffMultiSelect abilita il multi-select.
  • Pulsanti (push button) (/FT /Btn /Ff Pushbutton) via THPDFPage.AddPushButton with optional caption (/MK /CA). Since HotPDF v2.31.0, THPDFPage.AddPushButtonWithAction collega un dizionario di azioni PDF al widget così il clic sul pulsante esegue /SubmitForm (post field values to a URL, PDF 1.2 12.7.5.2), /ResetForm (PDF 1.2 12.7.5.3), /JavaScript (run a JS snippet, PDF 1.3 12.6.4.16) or /URI (open a URL in the system browser, PDF 1.1 12.6.4.7).
  • Campi segnaposto di firma (/FT /Sig) via THPDFPage.AddSignatureField dalla HotPDF v2.12.0. Il dizionario AcroForm guadagna automaticamente /SigFlags 3 (SignaturesExist + AppendOnly) quando è presente almeno un campo firma. Il campo resta non firmato così gli strumenti esterni (Adobe Acrobat, Foxit, librerie dedicate di firma CMS / PKCS#7) possono allegare la vera firma crittografica dopo il salvataggio del file.
  • Flusso di firma in place tramite THPDFPage.AddSignedSignatureField + THotPDF.PreparePDFForSigning + THotPDF.InsertSignatureHex dalla HotPDF v2.23.0. La prima chiamata riserva un dizionario firma /V con segnaposto /ByteRange e /Contents. Dopo aver salvato il documento l'applicazione ospite chiama PreparePDFForSigning per correggere /ByteRange e sapere quali range del file calcolare in hash. Dopo aver prodotto esternamente una firma detached CMS / PKCS#7 (Windows CryptoAPI, OpenSSL, librerie di firma dedicate), chiama InsertSignatureHex per depositare l'hex della firma nel segnaposto senza disturbare nessun altro byte del file.

Wrapper dei campi alla creazione

Dalla HotPDF v2.292.12, il THPDFPage.CreateTextField, CreateCheckBox, CreateRadioButton, CreateComboBox e CreateListBox creano gli stessi widget AcroForm dei Add... e restituiscono un wrapper leggero THPDFAcroFormField per la configurazione immediata

Dalla HotPDF v2.292.26, THotPDF.SetFormFieldTooltip assegna il PDF /TU suggerimento utente per nome di campo per i campi creati tramite i Add... metodi, in linea con il THPDFAcroFormField.SetTooltip workflow

Dalla HotPDF v2.298.0, le API dei campi alla creazione e quelle di creazione campi del documento caricato rifiutano nomi di campo radice duplicati con un'eccezione diagnostica prima che qualsiasi widget venga registrato. Ripetute AddRadioButton con lo stesso nome di gruppo restano valide perché condividono un campo padre e aggiungono ulteriori widget figli sotto la sua /Kids del campo

Il wrapper espone setter concatenabili per /TU tooltips, common field flags (SetReadOnly, SetRequired, SetNoExport), /DA stringhe di appearance predefinite, azioni aggiuntive a livello di campo come /AA /K, /AA /F, /AA /V, /AA /Ce le azioni mouse o focus dei widget tramite THPDFActionBuilder

Esempio Pascal dei wrapper alla creazione

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;

Ispezione e aggiornamento dei campi formulario caricati

Dalla HotPDF v2.121.9, le applicazioni possono caricare un PDF AcroForm esistente con THotPDF.LoadFromFile, enumerare i suoi campi, leggere nomi, tipi e valori, cambiare i valori dei campi, commutare il flag read-only e salvare il grafo di oggetti caricato con THotPDF.SaveLoadedDocument This path is intended for persisted edits to an already loaded document; do not call BeginDoc / EndDoc solo per salvare le modifiche ai valori dei campi caricati.

Gli helper dei campi sono GetFormFieldCount, GetFormFieldName, GetFormFieldType, GetFormFieldValue, SetFormFieldValue e SetFormFieldReadOnly. Il lookup dei campi accetta un indice di campo in base zero o il nome di campo pienamente qualificato. Il THPDFLoadedFormFieldType i valori sono lfftText, lfftButton, lfftChoice, lfftSignature, o lfftUnknown.

Esempio Pascal dei campi caricati

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');

Azioni aggiuntive dei campi

I wrapper AttachFieldKeyStrokeAction, AttachFieldFormatAction, AttachFieldValidateAction e AttachFieldCalculateAction collegano JavaScript al /AA per il PDF /K, /F, /V e /C trigger. Usa SetFormFieldAdditionalAction o i suoi THPDFActionBuilder quando lo stesso trigger deve eseguire una catena di azioni riutilizzabile come JavaScript, ResetForm, SubmitForm, URI, Hide, ImportData o una concatenata /Next . I trigger mouse e focus a livello di widget possono essere installati anche per nome campo tramite SetFormFieldAnnotationAction e gli helper nominati mouse / focus, mentre gli helper clear corrispondenti rimuovono un trigger senza toccare il resto del /AA dizionario

Generazione delle appearance

Per impostazione predefinita il /AcroForm imposta /NeedAppearances true and delegates appearance-stream rendering to the consuming viewer (Adobe Reader, Foxit, Chrome, browsers, Apple Preview). Set THotPDF.AutoFormAppearances to true prima di aggiungere i campi e HotPDF pre-costruirà /AP /N Form XObjects (PDF 1.7 8.10) for every text field, push button, choice (combo / list) and the Yes / Off di ogni figlio checkbox / radio. Il dizionario AcroForm porta quindi /NeedAppearances false e un /DR di risorse predefinite che referenzia i 14 font di base standard (Helv Helvetica, ZaDb ZapfDingbats), so renderers that ignore /NeedAppearances disegnino comunque correttamente il contenuto dei campi. Disponibile dalla HotPDF v2.28.0.

Field flag reference (THPDFFormFieldFlags)

  • ffReadOnly, ffRequired, ffNoExport — flag comuni della Tabella 227 applicabili a ogni tipo di campo.
  • ffMultiline, ffPassword, ffFileSelect, ffDoNotSpellCheck, ffDoNotScroll, ffComb, ffRichText — Tx-specific (Table 228).
  • ffEdit, ffSort, ffMultiSelect, ffDoNotSpellCheck, ffCommitOnSelChange — Ch-specific (Table 230).

Esempio Pascal

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

  • Il modulo AutoFormAppearances generator currently lays out ASCII / WinAnsi-encodable values only; for fields whose /V contains multi-byte (UTF-8) text the stored /AP renderizza un rettangolo vuoto finché il viewer ospite non rigenera l'appearance.
  • Down (/D) and rollover (/R) sub-states are not generated; only the normal (/N) state is produced.
  • I nomi dei campi vengono controllati per voci radice duplicate quando vengono creati nuovi widget AcroForm; la costruzione gerarchica di nomi parziali oltre il pattern padre radio / widget resta responsabilità del chiamante.

Vedi anche: