|
AcroForm サポート
概要
HotPDF v2.5.0 以降、このライブラリは PDF 1.7 ISO 32000-1 セクション 12.7 に従ってインタラクティブフォーム(AcroForm)を出力できます。各フォームフィールドは、フィールド辞書とマージされたウィジェット注釈として作成され、ドキュメントに自動的に登録されるため、ドキュメントが EndDoc で確定されると、グローバルな /AcroForm エントリがカタログに追加されます。
サポートされているフィールドタイプ
- Text fields (
/FT /Tx) via THPDFPage.AddTextField. Supports single-line, multi-line, password, comb, file-select, rich-text, scroll and spell-check options through THPDFFormFieldFlags.
- Check boxes (
/FT /Btn, no Pushbutton/Radio bits) via THPDFPage.AddCheckBox with a configurable export value name and initial checked state.
- radio buttons (
/FT /Btn /Ff Radio) は THPDFPage.AddRadioButton で作成します。同じ group name を持つ複数の calls は、12.7.4.2 が要求する通り、/Kids array を持つ shared parent field の下に merge されます
- Combo boxes (
/FT /Ch /Ff Combo) via THPDFPage.AddComboBox. Pass an open array of options.
- List boxes (
/FT /Ch) via THPDFPage.AddListBox. ffMultiSelect enables multi-select.
- push buttons (
/FT /Btn /Ff Pushbutton) は optional caption (/MK /CA) 付きの THPDFPage.AddPushButton で作成します。HotPDF v2.31.0 以降、THPDFPage.AddPushButtonWithAction は PDF action dictionary を widget に attach できるため、button click で /SubmitForm (field values を URL に post、PDF 1.2 12.7.5.2)、/ResetForm (PDF 1.2 12.7.5.3)、/JavaScript (JS snippet を実行、PDF 1.3 12.6.4.16)、または /URI (system browser で URL を開く、PDF 1.1 12.6.4.7) を実行できます
- HotPDF v2.12.0 以降、
THPDFPage.AddSignatureField による署名プレースホルダーフィールド (/FT /Sig)。少なくとも1つの署名フィールドが存在する場合、AcroForm 辞書は自動的に /SigFlags 3 (SignaturesExist + AppendOnly) を取得します。ファイルが保存された後に、外部ツール(Adobe Acrobat、Foxit、専用の CMS / PKCS#7 署名ライブラリ)が実際の暗号化署名を添付できるように、フィールドは未署名のままになります。
- HotPDF v2.23.0 以降、
THPDFPage.AddSignedSignatureField + THotPDF.PreparePDFForSigning + THotPDF.InsertSignatureHex によるインプレース署名ワークフロー。最初の呼び出しは、/ByteRange および /目次 プレースホルダーを含む /V 署名辞書を予約します。ドキュメントを保存した後、ホストアプリケーションは PreparePDFForSigning を呼び出して /ByteRange にパッチを適用し、ハッシュするファイル範囲を取得します。CMS / PKCS#7 の分離された署名を外部(Windows CryptoAPI、OpenSSL、専用の署名ライブラリ)で生成した後、InsertSignatureHex を呼び出して、ファイル内の他のバイトに影響を与えることなく、プレースホルダーに署名の16進数をドロップします。
ロードされたフォームフィールドの検査と更新
HotPDF v2.121.9 以降、アプリケーションは THotPDF.LoadFromFile を使用して既存の AcroForm PDF をロードし、そのフィールドを列挙し、名前、タイプ、および値を読み取り、フィールド値を変更し、読み取り専用フラグを切り替え、THotPDF.SaveLoadedDocument を使用してロードされたオブジェクトグラフを保存できます。このパスは、すでにロードされているドキュメントへの永続的な編集を目的としています。ロードされたフィールド値の変更を保存するためだけに BeginDoc / EndDoc を呼び出さないでください。
フィールドヘルパーは、GetFormFieldCount、GetFormField名前、GetFormField型、GetFormFieldValue、SetFormFieldValue、および SetFormFieldReadOnly です。フィールドのルックアップでは、ゼロベースのフィールドインデックスまたは完全修飾フィールド名のいずれかを受け入れます。返される THPDFLoadedFormField型 値は、lfftText、lfftButton、lfftChoice、lfftSignature、または lfftUnknown です。
ロードされたフィールドのPascalの例
HPDF.LoadFromFile('InputForm.pdf');
for I := 0 to HPDF.GetFormFieldCount - 1 do
Writeln(HPDF.GetFormField名前(I), ' = ', HPDF.GetFormFieldValue(I));
HPDF.SetFormFieldValue('Customer名前', 'Bob');
HPDF.SetFormFieldValue('Plan', 'Premium');
HPDF.SetFormFieldReadOnly('Customer名前', True);
HPDF.SaveLoadedDocument('UpdatedForm.pdf');
フィールドの追加アクション
ラッパー AttachFieldKeyStrokeAction、AttachFieldFormatAction、AttachFieldValidateAction、および AttachFieldCalculateAction は、PDFの /K、/F、/V、および /C トリガーのフィールドの /AA 辞書にJavaScriptをアタッチします。ボタンアクションではなくフィールドにキーストロークフィルタリング、表示形式、検証、または計算フィールドの更新が存在する必要がある場合は、フィールドを作成またはロードした後にこれらを使用します。
外観の生成
デフォルトでは、出力される /AcroForm 辞書は /NeedAppearances true を設定し、外観ストリームのレンダリングを使用するビューアー(Adobe Reader、Foxit、Chrome、ブラウザ、Apple Preview)に委譲します。フィールドを追加する前に THotPDF.AutoFormAppearances を true に設定すると、HotPDF はすべてのテキストフィールド、プッシュボタン、選択(コンボ/リスト)、およびすべてのチェックボックス/ラジオキッズの Yes / Off 状態に対して /AP /N フォーム XObject(PDF 1.7 8.10)を事前にビルドします。その後、AcroForm 辞書は /NeedAppearances false を持ち、標準の14個のベースフォント(Helv Helvetica、ZaDb ZapfDingbats)を参照する /DR デフォルトリソースエントリを持つため、/NeedAppearances を無視するレンダラーでもフィールドのコンテンツが正しく描画されます。HotPDF v2.28.0 以降で利用可能です。
フィールドフラグリファレンス (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の例
HPDF.BeginDoc;
HPDF.AddPage;
HPDF.CurrentPage.AddTextField('名前', '', 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;
制限事項
AutoFormAppearances ジェネレーターは現在、ASCII / WinAnsi でエンコード可能な値のみをレイアウトします。/V にマルチバイト (UTF-8) テキストが含まれるフィールドの場合、保存された /AP は、ホストビューアーが外観を再生成するまで空の四角形をレンダリングします。
- ダウン (
/D) およびロールオーバー (/R) のサブ状態は生成されません。通常 (/N) の状態のみが生成されます。
- Field name uniqueness is the caller's responsibility; HotPDF does not enforce it.
関連項目
|