TypeScriptでAcroFormフィールドを操作する方法

TypeScriptでAcroFormフィールドを操作する方法

このガイドでは、TypeScript 用の Aspose.PDF FOSS を使用して AcroForm フィールドを追加およびフラット化する方法を示します。Document.Form は、テキスト、チェックボックス、ラジオグループ、コンボボックス、リストボックス、プッシュボタンという各フィールドタイプごとに 1 つの Add* メソッドを公開し、型付きフィールドハンドルを返します。Node.js 22 以降が必要です。

ステップバイステップガイド

ステップ 1: パッケージをインストールする

git clone https://github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-TypeScript.git
cd Aspose.PDF-FOSS-for-TypeScript
npm install
npm run build

パッケージがインストールされたら、新しい TypeScript ファイルで Document クラスをインポートしてインストールを確認します — この行はエラーなく解決されるはずです:

import { Document } from '@asposefoss/pdf';

ステップ 2: 必要なクラスをインポートする

インポート Document を使用してファイルを開き、doc.Form に到達します。これは以下で使用されるすべてのフィールドメソッドのエントリーポイントです:

import { Document } from '@asposefoss/pdf';

ステップ 3: テキストフィールドとチェックボックスを追加

Form.AddTextField(init) と Form.AddCheckbox(init) はどちらも page 番号、rect、一意の name、およびスタイルオプションを受け取ります:

const doc = Document.OpenFile('form-template.pdf');
const form = doc.Form;
const pageNum = doc.Pages[0].Number;

form.AddTextField({
  page: pageNum, rect: [200, 670, 450, 690], name: 'FullName', value: 'Alice Sample',
  borderColor: [0.1, 0.15, 0.4], font: 'Helvetica', fontSize: 12,
});

form.AddCheckbox({
  page: pageNum, rect: [200, 630, 218, 648], name: 'Subscribe',
  checked: true, borderColor: [0.1, 0.15, 0.4],
});

ステップ 4: ラジオグループ、コンボボックス、リストボックスを追加

Form.AddRadioGroup(init) は、その options 配列内のすべてのオプションで共有される単一の name を受け取ります。各オプションはそれぞれ固有の rect と export 値を持ちます。Form.AddComboBox(init) と Form.AddListBox(init) は { export, display } ペアの options 配列を受け取ります;リストボックスはさらに multiSelect をサポートします:

form.AddRadioGroup({
  name: 'Plan', selected: 'Pro',
  options: [
    { page: pageNum, rect: [200, 590, 218, 608], export: 'Basic' },
    { page: pageNum, rect: [290, 590, 308, 608], export: 'Pro' },
  ],
});

form.AddComboBox({
  page: pageNum, rect: [200, 550, 350, 570], name: 'Country', value: 'US',
  options: [
    { export: 'US', display: 'United States' },
    { export: 'UK', display: 'United Kingdom' },
  ],
});

form.AddListBox({
  page: pageNum, rect: [200, 410, 350, 510], name: 'Interests',
  multiSelect: true, value: ['pdf'],
  options: [
    { export: 'pdf', display: 'PDF Engineering' },
    { export: 'crypto', display: 'Cryptography' },
  ],
});

ステップ 5: プッシュボタンを追加

Form.AddPushButton(init) は、caption と、クリック時にボタンが何をするかを記述する action を受け取ります — 例として、フォームのデータを URL に送信する場合など:

form.AddPushButton({
  page: pageNum, rect: [200, 320, 320, 388], name: 'Submit',
  caption: 'Submit',
  action: { type: 'submit', url: 'https://example.com/submit', format: 'fdf' },
});

ステップ 6: フォームフィールドをフラット化

Add* 呼び出しで返されるすべてのフィールドハンドルは、現在の値をページのコンテンツストリームに埋め込み、インタラクティブな AcroForm から削除する Flatten() メソッドを持ちます:

const tb = form.AddTextField({
  page: pageNum, rect: [210, 660, 460, 680], name: 'FlattenName', value: 'Alice Sample',
});
tb.Flatten(); // -> number; bakes the value, unwires the field from /AcroForm

doc.WriteTo('flattened.pdf');

一般的な問題と解決策

フィールドが意図したページに表示されません。 page フィールドの init オブジェクトはそのページ固有のページ番号であり、配列インデックスではありません — それと照らし合わせて確認してください page.Number 対象の Page.

ラジオボタンのオプションは相互排他ではありません。 すべてのオプションは Form.AddRadioGroup()の options 配列はグループの単一のものを共有しなければなりません name — フィールド名を混在させると、ラジオグループではなく独立したチェックボックスが作成されます。

フラット化されたフィールドの値は、保存されたファイルに表示されません。 ドキュメントを保存する (doc.WriteTo() / doc.Save()) 呼び出した後 Flatten() — 変更はファイルが書き戻されるまでメモリ上にのみ存在します。

コンボボックスは表示テキストではなくエクスポート値を表示します。 外観が描画されます display; フィールドの保存された値 (/V) は export — すべてのオプションで両方が設定されていることを確認してください、一つだけでなく。

よくある質問

フォームが入力された後に、フィールドの現在の値を読み取れますか?

はい — フィールドハンドルの Value プロパティを読み取るか、doc.Form.Fields を反復してドキュメント上のすべてのフィールドを検査します。

フィールド上の Flatten() とアノテーション上の Flatten() の違いは何ですか?

両方ともインタラクティブコンテンツを静的ページコンテンツに組み込み、対応するコレクションから削除します — フィールドの Flatten() から削除します /AcroForm、アノテーションの Flatten() (以下で取り上げられる アノテーション ガイド) はページの /Annots.

リストボックスで複数選択を許可できますか?

はい — Form.AddListBox() の init オブジェクトに multiSelect: true を設定し、value に配列を渡します。

プッシュボタンは有用にするためにアクションが必要ですか?

action(例: { type: 'submit', url, format })が、クリック時にボタンに動作を与える要素です。これがないと、ボタンは表示されますが、何の動作も割り当てられていません。

参照

 日本語