|
AcroForm-stöd
Översikt
Sedan HotPDF v2.5.0 kan biblioteket emittera interaktiva formulär
(AcroForm) enligt PDF 1.7 ISO 32000-1 section 12.7. Varje formulärfält
skapas som en Widget-annotation sammanslagen med fältordlistan och
registreras automatiskt med dokumentet, så den globala posten
/AcroForm läggs till i Catalog när dokumentet slutförs i
EndDoc.
Fälttyper som stöds
- Textfält (
/FT /Tx) via THPDFPage.AddTextField. Stöder enkelrad, flerrad, lösenord, comb, filval, rich-text, rullning och stavningskontroll via THPDFFormFieldFlags.
- Kryssrutor (
/FT /Btn, utan Pushbutton/Radio-bitar) via THPDFPage.AddCheckBox med konfigurerbart exportvärdesnamn och initialt markerat läge.
- Radioknappar (
/FT /Btn /Ff Radio) via THPDFPage.AddRadioButton. Flera anrop med samma gruppnamn slås samman under ett delat föräldrafält med en /Kids-array, exakt som 12.7.4.2 kräver.
- Kombinationsrutor (
/FT /Ch /Ff Combo) via THPDFPage.AddComboBox. Skicka en öppen array med alternativ.
- Listrutor (
/FT /Ch) via THPDFPage.AddListBox. ffMultiSelect aktiverar flerval.
- Tryckknappar (
/FT /Btn /Ff Pushbutton) via THPDFPage.AddPushButton med valfri bildtext (/MK /CA). Sedan HotPDF v2.31.0 kopplar THPDFPage.AddPushButtonWithAction en PDF-aktionsordlista till widgeten så att ett knappklick kör /SubmitForm (posta fältvärden till en URL, PDF 1.2 12.7.5.2), /ResetForm (PDF 1.2 12.7.5.3), /JavaScript (kör ett JS-fragment, PDF 1.3 12.6.4.16) eller /URI (öppna en URL i systemwebbläsaren, PDF 1.1 12.6.4.7).
- Platshållarfält för signatur (
/FT /Sig) via THPDFPage.AddSignatureField sedan HotPDF v2.12.0. AcroForm-ordlistan får automatiskt /SigFlags 3 (SignaturesExist + AppendOnly) när minst ett signaturfält finns. Fältet lämnas osignerat så externa verktyg (Adobe Acrobat, Foxit, dedikerade CMS / PKCS#7-signeringsbibliotek) kan bifoga den faktiska kryptografiska signaturen efter att filen har sparats.
- Arbetsflöde för signering på plats via
THPDFPage.AddSignedSignatureField + THotPDF.PreparePDFForSigning + THotPDF.InsertSignatureHex sedan HotPDF v2.23.0. Det första anropet reserverar en /V-signaturordlista med platshållare för /ByteRange och /Contents. Efter att dokumentet sparats anropar värdprogrammet PreparePDFForSigning för att patcha /ByteRange och få veta vilka filintervall som ska hashas. Efter att en fristående CMS / PKCS#7-signatur har skapats externt (Windows CryptoAPI, OpenSSL, dedikerade signeringsbibliotek) anropas InsertSignatureHex för att lägga signaturhexen i platshållaren utan att störa någon annan byte i filen.
Inspektion och uppdatering av inlästa formulärfält
Sedan HotPDF v2.121.9 kan program läsa in en befintlig AcroForm-PDF
med THotPDF.LoadFromFile, räkna upp dess fält, läsa deras
namn, typer och värden, ändra fältvärden, växla skrivskyddsflaggan och
spara den inlästa objektgrafen med THotPDF.SaveLoadedDocument
Den här vägen är avsedd för beständiga ändringar i ett redan inläst
dokument; anropa inte BeginDoc / EndDoc bara för
att spara ändringar av inlästa fältvärden.
Fälthjälparna är GetFormFieldCount,
GetFormFieldName, GetFormFieldType,
GetFormFieldValue, SetFormFieldValue och
SetFormFieldReadOnly. Fältuppslag accepterar antingen ett
nollbaserat fältindex eller det fullständigt kvalificerade fältnamnet;
De returnerade THPDFLoadedFormFieldType-värdena är
lfftText, lfftButton, lfftChoice,
lfftSignature eller lfftUnknown.
Pascal-exempel för inläst fält
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');
Ytterligare fältåtgärder
Omslagen AttachFieldKeyStrokeAction, AttachFieldFormatAction, AttachFieldValidateAction och AttachFieldCalculateAction kopplar JavaScript till fältets /AA-ordlista för PDF-utlösarna /K, /F, /V och /C. Använd dem efter att ett fält har skapats eller lästs in när tangenttrycksfiltrering, visningsformattering, validering eller uppdateringar av beräknade fält ska ligga med fältet i stället för i en knappåtgärd.
Generering av utseende
Som standard sätter den emitterade /AcroForm-ordlistan
/NeedAppearances true och delegerar rendering av
utseendeströmmar till visaren som konsumerar dokumentet (Adobe Reader,
Foxit, Chrome, webbläsare, Apple Preview). Sätt
THotPDF.AutoFormAppearances till true innan fält
läggs till, så förbygger HotPDF /AP /N Form XObjects (PDF
1.7 8.10) för varje textfält, tryckknapp, val (combo / lista) och
Yes / Off-tillstånden för varje kryssruta /
radiobarn. AcroForm-ordlistan innehåller då
/NeedAppearances false och en /DR-post för
standardresurser som refererar till de 14 standardbasfonterna
(Helv Helvetica, ZaDb ZapfDingbats), så
renderare som ignorerar /NeedAppearances ritar fortfarande
fältinnehållet korrekt. Tillgängligt sedan HotPDF v2.28.0.
Referens för fältflaggor (THPDFFormFieldFlags)
ffReadOnly, ffRequired, ffNoExport — gemensamma Table 227-flaggor som gäller alla fälttyper.
ffMultiline, ffPassword, ffFileSelect, ffDoNotSpellCheck, ffDoNotScroll, ffComb, ffRichText — Tx-specifika (Table 228).
ffEdit, ffSort, ffMultiSelect, ffDoNotSpellCheck, ffCommitOnSelChange — Ch-specifika (Table 230).
Pascal-exempel
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;
Begränsningar
- Generatorn
AutoFormAppearances lägger för närvarande bara ut värden som kan kodas som ASCII / WinAnsi; för fält vars /V innehåller flerbytestext (UTF-8) renderar den lagrade /AP en tom rektangel tills värdvisaren återskapar utseendet.
- Undertillstånden down (
/D) och rollover (/R) genereras inte; endast normaltillståndet (/N) skapas.
- Unika fältnamn är anroparens ansvar; HotPDF tvingar inte fram det.
Se även
|