AcroForm – podpora

Přehled

Od HotPDF v2.5.0 může knihovna vytvářet interaktivní formuláře (AcroForm) podle PDF 1.7 ISO 32000-1 oddíl 12.7. Každé formulářové pole se vytvoří jako anotace Widget sloučená se slovníkem pole a automaticky se zaregistruje v dokumentu, takže při dokončení dokumentu v EndDoc se do katalogu přidá globální položka /AcroForm

Podporované typy polí

  • Textová pole (/FT /Tx) přes THPDFPage.AddTextField. Přes THPDFFormFieldFlags podporují jednořádkový a víceřádkový text, heslo, comb, výběr souboru, rich text, posouvání a kontrolu pravopisu
  • Zaškrtávací políčka (/FT /Btn, bez bitů Pushbutton/Radio) přes THPDFPage.AddCheckBox s konfigurovatelným názvem exportní hodnoty a počátečním zaškrtnutým stavem
  • Přepínače (/FT /Btn /Ff Radio) přes THPDFPage.AddRadioButton. Více volání se stejným názvem skupiny se sloučí pod společné rodičovské pole s polem /Kids, přesně podle požadavku 12.7.4.2
  • Combo boxy (/FT /Ch /Ff Combo) přes THPDFPage.AddComboBox. Předejte otevřené pole voleb
  • Seznamy (/FT /Ch) přes THPDFPage.AddListBox. ffMultiSelect povolí výběr více položek
  • Tlačítka (/FT /Btn /Ff Pushbutton) přes THPDFPage.AddPushButton s volitelným popiskem (/MK /CA). Od HotPDF v2.31.0 připojuje THPDFPage.AddPushButtonWithAction k widgetu slovník akce PDF, takže kliknutí na tlačítko spustí /SubmitForm (odešle hodnoty polí na URL, PDF 1.2 12.7.5.2), /ResetForm (PDF 1.2 12.7.5.3), /JavaScript (spustí úryvek JS, PDF 1.3 12.6.4.16) nebo /URI (otevře URL v systémovém prohlížeči, PDF 1.1 12.6.4.7)
  • Zástupná podpisová pole (/FT /Sig) přes THPDFPage.AddSignatureField od HotPDF v2.12.0. Slovník AcroForm automaticky získá /SigFlags 3 (SignaturesExist + AppendOnly), když je přítomno alespoň jedno podpisové pole. Pole zůstává nepodepsané, aby mohly externí nástroje (Adobe Acrobat, Foxit, specializované knihovny CMS / PKCS#7) po uložení souboru připojit skutečný kryptografický podpis
  • Pracovní postup podpisu na místě přes THPDFPage.AddSignedSignatureField + THotPDF.PreparePDFForSigning + THotPDF.InsertSignatureHex od HotPDF v2.23.0. První volání vyhradí podpisový slovník /V se zástupnými místy /ByteRange a /Contents. Po uložení dokumentu hostitelská aplikace zavolá PreparePDFForSigning, aby opravila /ByteRange a zjistila rozsahy souboru určené k hashování. Po externím vytvoření odděleného podpisu CMS / PKCS#7 (Windows CryptoAPI, OpenSSL, specializované podpisové knihovny) zavolá InsertSignatureHex a vloží hex podpis do zástupného místa bez změny ostatních bajtů souboru

Kontrola a aktualizace načtených formulářových polí

Od HotPDF v2.121.9 mohou aplikace načíst existující PDF AcroForm pomocí THotPDF.LoadFromFile, vyjmenovat jeho pole, číst jejich názvy, typy a hodnoty, měnit hodnoty polí, přepínat příznak jen pro čtení a uložit načtený objektový graf pomocí THotPDF.SaveLoadedDocument Tato cesta je určená pro trvalé úpravy už načteného dokumentu; kvůli uložení změn hodnot načtených polí nevolejte BeginDoc / EndDoc

Pomocné funkce polí jsou GetFormFieldCount, GetFormFieldName, GetFormFieldType, GetFormFieldValue, SetFormFieldValue a SetFormFieldReadOnly. Vyhledání pole přijímá buď index pole od nuly, nebo plně kvalifikovaný název pole. Vrácené hodnoty THPDFLoadedFormFieldType jsou lfftText, lfftButton, lfftChoice, lfftSignature nebo lfftUnknown

Příklad načteného pole v Pascalu

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

Doplňkové akce polí

Obaly AttachFieldKeyStrokeAction, AttachFieldFormatAction, AttachFieldValidateAction a AttachFieldCalculateAction připojují JavaScript ke slovníku pole /AA pro PDF spouštěče /K, /F, /V a /C. Použijte je po vytvoření nebo načtení pole, když má filtrování stisků kláves, formátování zobrazení, validace nebo aktualizace vypočtených polí zůstat u pole, ne u akce tlačítka

Generování vzhledu

Ve výchozím stavu emitovaný slovník /AcroForm nastaví /NeedAppearances true a přenechá vykreslení appearance streamů koncovému prohlížeči (Adobe Reader, Foxit, Chrome, prohlížeče, Apple Preview). Před přidáním polí nastavte THotPDF.AutoFormAppearances na true a HotPDF předem sestaví Form XObjects /AP /N (PDF 1.7 8.10) pro každé textové pole, tlačítko, volbu (combo / list) a stavy Yes / Off každého potomka checkboxu nebo přepínače. Slovník AcroForm pak nese /NeedAppearances false a výchozí položku prostředků /DR odkazující na standardních 14 základních písem (Helv Helvetica, ZaDb ZapfDingbats), takže renderery, které ignorují /NeedAppearances, přesto obsah pole vykreslí správně Dostupné od HotPDF v2.28.0

Reference příznaků polí (THPDFFormFieldFlags)

  • ffReadOnly, ffRequired, ffNoExport — společné příznaky z tabulky 227 použitelné pro každý typ pole
  • ffMultiline, ffPassword, ffFileSelect, ffDoNotSpellCheck, ffDoNotScroll, ffComb, ffRichText — specifické pro Tx (tabulka 228)
  • ffEdit, ffSort, ffMultiSelect, ffDoNotSpellCheck, ffCommitOnSelChange — specifické pro Ch (tabulka 230)

Pascal example

HPDF.BeginDoc;
HPDF.AddPage;
HPDF.CurrentPage.AddTextField('Name', '', Rect(50, 100, 250, 120));
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;

Omezení

  • Generátor AutoFormAppearances aktuálně rozvrhuje pouze hodnoty kódovatelné jako ASCII / WinAnsi; u polí, jejichž /V obsahuje vícebajtový text (UTF-8), uložené /AP vykreslí prázdný obdélník, dokud hostitelský prohlížeč vzhled znovu nevytvoří
  • Podstavy Down (/D) a rollover (/R) se negenerují; vytváří se pouze normální stav (/N)
  • Jedinečnost názvů polí je odpovědností volajícího; HotPDF ji nevynucuje

Viz také