AcroForm podrška

Pregled

Od HotPDF v2.5.0 biblioteka može da emituje interaktivne obrasce (AcroForm) prema PDF 1.7 ISO 32000-1 odeljku 12.7. Svako polje obrasca se kreira kao Widget anotacija spojena sa rečnikom polja i automatski se registruje sa dokumentom tako da se globalni unos /AcroForm dodaje u Catalog kada se dokument završava u EndDoc

Podržani tipovi polja

  • Tekstualna polja (/FT /Tx) preko THPDFPage.AddTextField. Podržava jednolinijske, višelinijske, lozinke, comb, izbor fajla, rich-text, pomeranje i proveru pravopisa kroz THPDFFormFieldFlags
  • Polja za potvrdu (/FT /Btn, bez Pushbutton/Radio bitova) preko THPDFPage.AddCheckBox sa podesivim imenom izvozne vrednosti i početnim označenim stanjem
  • Radio dugmad (/FT /Btn /Ff Radio) preko THPDFPage.AddRadioButton. Višestruki pozivi sa istim imenom grupe spajaju se pod deljenim roditeljskim poljem sa nizom /Kids, baš kao što zahteva 12.7.4.2
  • Combo polja (/FT /Ch /Ff Combo) preko THPDFPage.AddComboBox. Prosledite otvoreni niz opcija
  • List polja (/FT /Ch) preko THPDFPage.AddListBox. ffMultiSelect omogućava višestruki izbor
  • Push dugmad (/FT /Btn /Ff Pushbutton) preko THPDFPage.AddPushButton sa opcionalnim natpisom (/MK /CA). Od HotPDF v2.31.0, THPDFPage.AddPushButtonWithAction prikačuje PDF akcioni rečnik widgetu tako da klik na dugme pokreće /SubmitForm (slanje vrednosti polja na URL, PDF 1.2 12.7.5.2), /ResetForm (PDF 1.2 12.7.5.3), /JavaScript (pokretanje JS isečka, PDF 1.3 12.6.4.16) ili /URI (otvaranje URL-a u sistemskom pregledaču, PDF 1.1 12.6.4.7)
  • Polja za potpis (/FT /Sig) preko THPDFPage.AddSignatureField od HotPDF v2.12.0. Rečnik AcroForm automatski dobija /SigFlags 3 (SignaturesExist + AppendOnly) kada je prisutno bar jedno polje za potpis. Polje ostaje nepotpisano tako da eksterni alati (Adobe Acrobat, Foxit, namenski CMS / PKCS#7 alati za potpisivanje) mogu da prilože stvarni kriptografski potpis posle čuvanja fajla
  • Tok rada za potpisivanje u mestu preko THPDFPage.AddSignedSignatureField + THotPDF.PreparePDFForSigning + THotPDF.InsertSignatureHex od HotPDF v2.23.0. Prvi poziv rezerviše /V rečnik potpisa sa /ByteRange i /Contents rezervama. Posle čuvanja dokumenta host aplikacija poziva PreparePDFForSigning da zakrpi /ByteRange i sazna koje opsege fajla treba heširati. Posle eksternog pravljenja CMS / PKCS#7 detached potpisa (Windows CryptoAPI, OpenSSL, namenski alati za potpisivanje), poziva InsertSignatureHex da ubaci heks potpisa u rezervu bez narušavanja bilo kog drugog bajta u fajlu

Loaded form-field inspection and updates

Od HotPDF v2.121.9 aplikacije mogu da učitaju postojeći AcroForm PDF pomoću THotPDF.LoadFromFile, da nabroje njegova polja, pročitaju njihova imena, tipove i vrednosti, promene vrednosti polja, prebace zastavicu samo za čitanje i sačuvaju učitani graf objekata pomoću THotPDF.SaveLoadedDocument. Ovaj put je namenjen trajnim izmenama već učitanog dokumenta; ne zovite BeginDoc / EndDoc samo da biste sačuvali promene vrednosti polja

Pomoćne funkcije za polja su GetFormFieldCount, GetFormFieldName, GetFormFieldType, GetFormFieldValue, SetFormFieldValue i SetFormFieldReadOnly. Pretraga polja prihvata ili indeks polja zasnovan na nuli ili potpuno kvalifikovano ime polja. Vraćene vrednosti THPDFLoadedFormFieldType su lfftText, lfftButton, lfftChoice, lfftSignature ili lfftUnknown

Loaded-field Pascal example

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

Field additional actions

Omotači AttachFieldKeyStrokeAction, AttachFieldFormatAction, AttachFieldValidateAction i AttachFieldCalculateAction prikačuju JavaScript u rečnik /AA polja za PDF okidače /K, /F, /V i /C. Koristite ih posle kreiranja ili učitavanja polja kada filtriranje unosa, prikazno formatiranje, validacija ili ažuriranja izračunatog polja moraju da žive uz polje umesto uz dugme

Appearance generation

Podrazumevano, emitovani rečnik /AcroForm postavlja /NeedAppearances true i prepušta renderovanje appearance tokova pregledaču koji koristi dokument (Adobe Reader, Foxit, Chrome, pregledači, Apple Preview). Postavite THotPDF.AutoFormAppearances na true pre dodavanja polja i HotPDF će unapred napraviti /AP /N Form XObject-e (PDF 1.7 8.10) za svako tekstualno polje, push dugme, izborno polje (combo / list) i stanja Yes / Off za svaku potvrdu / radio ćeliju. Rečnik AcroForm tada nosi /NeedAppearances false i /DR unos podrazumevanih resursa koji upućuje na standardnih 14 osnovnih fontova (Helv Helvetica, ZaDb ZapfDingbats), pa rendereri koji ignorišu /NeedAppearances i dalje ispravno crtaju sadržaj polja. Dostupno od HotPDF v2.28.0

Field flag reference (THPDFFormFieldFlags)

  • ffReadOnly, ffRequired, ffNoExport — common Table 227 flags applicable to every field type.
  • ffMultiline, ffPassword, ffFileSelect, ffDoNotSpellCheck, ffDoNotScroll, ffComb, ffRichText — Tx-specific (Table 228).
  • ffEdit, ffSort, ffMultiSelect, ffDoNotSpellCheck, ffCommitOnSelChange — Ch-specific (Table 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;

Limitations

  • Generator AutoFormAppearances trenutno raspoređuje samo ASCII / WinAnsi-kodabilne vrednosti; za polja čiji /V sadrži višebajtni (UTF-8) tekst sačuvani /AP prikazuje prazan pravougaonik dok host pregledač ne regeneriše izgled
  • Pod-stanja Down (/D) i rollover (/R) se ne generišu; proizvodi se samo normalno stanje (/N)
  • Jedinstvenost imena polja je odgovornost pozivaoca; HotPDF to ne nameće

Vidi i