|
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é
|