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 を呼び出さないでください。

フィールドヘルパーは、GetFormFieldCountGetFormField名前GetFormField型GetFormFieldValueSetFormFieldValue、および SetFormFieldReadOnly です。フィールドのルックアップでは、ゼロベースのフィールドインデックスまたは完全修飾フィールド名のいずれかを受け入れます。返される THPDFLoadedFormField型 値は、lfftTextlfftButtonlfftChoicelfftSignature、または 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');

フィールドの追加アクション

ラッパー AttachFieldKeyStrokeActionAttachFieldFormatActionAttachFieldValidateAction、および AttachFieldCalculateAction は、PDFの /K/F/V、および /C トリガーのフィールドの /AA 辞書にJavaScriptをアタッチします。ボタンアクションではなくフィールドにキーストロークフィルタリング、表示形式、検証、または計算フィールドの更新が存在する必要がある場合は、フィールドを作成またはロードした後にこれらを使用します。

外観の生成

デフォルトでは、出力される /AcroForm 辞書は /NeedAppearances true を設定し、外観ストリームのレンダリングを使用するビューアー(Adobe Reader、Foxit、Chrome、ブラウザ、Apple Preview)に委譲します。フィールドを追加する前に THotPDF.AutoFormAppearancestrue に設定すると、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.

関連項目