XXXVII. Forms Data Format 関数

導入

Forms Data Format (FDF)は、PDF ドキュメント内部のフォームを処理する ためのフォーマットです。FDF の詳細および一般的な用途については、 http://partners.adobe.com/asn/acrobat/forms.jsp にある ドキュメントを参照ください。

FDF の基本的な考えは HTML フォームに似ています。基本的な違いは、 投稿ボタンが押された際にフォームに埋められたデータをサーバに送信する 方法のフォーマット(これが Form Data Format そのものです)およびフォームの フォーマット自体(これは Portable Document Format、PDF です)です。 FDF データの処理は、fdf 関数が提供する機能の一つです。しかし他にも 機能はあります。既存の PDF フォームを用いてフォーム自体を修正せずに 入力フィールドのデータを入力させることもあるかと思われます。 このような場合、FDF ドキュメント を作成し ( fdf_create() )、各入力フィールドの値を設定し ( fdf_set_value() )、PDF フォームとそれを関連付けます ( fdf_set_file() )。最後にブラウザに MIME 型 application/vnd.fdf で送信する必要があります。 ブラウザの Acrobat Reader プラグイン がこの MIME 型を認識し、 関連する PDF フォームを読み込み、FDF ドキュメントからのデータを 書き込みます。

テキストエディタで FDF ドキュメントの中を見てみると、 FDF という名前のカタログオブジェクトが見つかる はずです。このようなオブジェクトには Fields F Status といった複数の エントリが含まれます。 最も多く使用されるエントりは Fields および F で、 Fields は 一連の入力フィールドを指し、 F は このデータが属する PDF ドキュメントのファイル名を保持します。 これらのエントリは、FDF ドキュメントの中で /F-Key または /Status-Key として参照されています。 fdf_set_file() および fdf_set_status() のような関数により、これらの エントリを修正することが可能です。Fields は、 fdf_set_value() fdf_set_opt() 等で修整可能です。

要件

http://partners.adobe.com/asn/acrobat/forms.jsp から取得可能な FDF toolkit SDKが必要です。 PHP 4.3 以降では、少なくとも SDK version 5.0 が必要です。 FDF toolkit library はバイナリ版のみ利用可能で、 Adobe によりサポートされているプラットフォームは Win32、Linux、Solaris、AIX です。

インストール手順

--with-fdftk[=DIR] を指定して PHP を コンパイルする必要があります。

注意: fdftk サポートを指定して PHP を設定した際に問題を発生した場合、 ヘッダファイル fdftk.h および ライブラリ libfdftk.so が正しい場所にあることを 確認してください。configure スクリプトは、FDF SDK 配布ファイルおよび 通常の DIR/include DIR/lib といった配置のディレクトリ構造をともに サポートします。このため、配布ファイルを展開したディレクトリにそのまま おいておくか、あるいは /usr/local/include および /usr/local/lib のように使用するプラットフォームに 応じた適当なディレクトリに移動して --with-fdftk=/usr/local を指定して 設定することが可能です。

Win32 ユーザへの注意: Windows 環境でこのモジュールを有効にするには、PHP/Win32 バイナリ パッケージの DLL フォルダから fdftk.dll を 使用する Windows マシンの SYSTEM32 フォルダ (例: C:\WINNT\SYSTEM32 あるいは C:\WINDOWS\SYSTEM32 ) へコピーする必要があります。

実行時設定

設定ディレクティブは定義されていません。

リソース型

fdf

多くの fdf 関数は、最初のパラメータとして fdf リソースを必要とします。 fdf リソースは、オープンした fdf ファイルの ハンドルです。 fdf リソースは、 fdf_create() fdf_open() fdf_open_string() を用いて取得することが可能です。

定義済み定数

以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。

FDFValue ( integer )

FDFStatus ( integer )

FDFFile ( integer )

FDFID ( integer )

FDFFf ( integer )

FDFSetFf ( integer )

FDFClearFf ( integer )

FDFFlags ( integer )

FDFSetF ( integer )

FDFClrF ( integer )

FDFAP ( integer )

FDFAS ( integer )

FDFAction ( integer )

FDFAA ( integer )

FDFAPRef ( integer )

FDFIF ( integer )

FDFEnter ( integer )

FDFExit ( integer )

FDFDown ( integer )

FDFUp ( integer )

FDFFormat ( integer )

FDFValidate ( integer )

FDFKeystroke ( integer )

FDFCalculate ( integer )

FDFNormalAP ( integer )

FDFRolloverAP ( integer )

FDFDownAP ( integer )

以下の例でフォームデータの評価に関して説明します。

例 1. FDF ドキュメントの評価

<?php
// 拡張モジュールが提供する入力文字列から fdf をオープンします。
// pdf フォームには volume, date, comment, publisher, preparer
// という名前のテキスト入力フィールドと 2 つのチェックボックス
// show_publisher および show_preparer があるものとします。
$fdf = fdf_open_string ( $HTTP_FDF_DATA );
$volume = fdf_get_value ( $fdf , "volume" );
echo
"volume フィールドの値は '<b>$volume</b>'<br />" ;

$date = fdf_get_value ( $fdf , "date" );
echo
"date フィールドの値は '<b>$date</b>'<br />" ;

$comment = fdf_get_value ( $fdf , "comment" );
echo
"comment フィールドの値は '<b>$comment</b>'<br />" ;

if (
fdf_get_value ( $fdf , "show_publisher" ) == "On" ) {
  
$publisher = fdf_get_value ( $fdf , "publisher" );
  echo
"publisher フィールドの値は '<b>$publisher</b>'<br />" ;
} else
  echo
"Publisher は非公開です。<br />" ;

if (
fdf_get_value ( $fdf , "show_preparer" ) == "On" ) {
  
$preparer = fdf_get_value ( $fdf , "preparer" );
  echo
"preparer フィールドの値は '<b>$preparer</b>'<br />" ;
} else
  echo
"Preparer は非公開です。<br />" ;
fdf_close ( $fdf );
?>

目次
fdf_add_doc_javascript  -- FDF ドキュメントに javascript コードを追加する
fdf_add_template  -- テンプレートを FDF ドキュメントに追加する
fdf_close  -- FDF ドキュメントを閉じる
fdf_create  -- 新規 FDF ドキュメントを作成する
fdf_enum_values  -- 各ドキュメントの値に対してユーザ定義関数をコールする
fdf_errno  -- 直近の fdf 操作に関するエラーコードを返す
fdf_error  -- 直近の fdf エラーコードについての説明を返す
fdf_get_ap  -- フィールドの外観を取得する
fdf_get_attachment  -- FDF に埋め込まれている、アップロードされたファイルを展開する
fdf_get_encoding  -- /Encoding キーの値を取得する
fdf_get_file  -- /F キーの値を得る
fdf_get_flags  -- フィールドのフラグを取得する
fdf_get_opt  -- フィールドのオプション配列から値を取得する
fdf_get_status  -- /STATUS キーの値を得る
fdf_get_value  -- フィールドの値を得る
fdf_get_version  -- FDF API あるいはファイルのバージョンを取得する
fdf_header  -- FDF 固有の出力ヘッダをセットする
fdf_next_field_name  -- 次のフィールド名を得る
fdf_open_string  -- 文字列から FDF ドキュメントを読み込む
fdf_open  -- FDF ドキュメントをオープンする
fdf_remove_item  -- フォームのターゲットフレームを設定する
fdf_save_string  -- FDF ドキュメントを文字列として返す
fdf_save  -- FDF ドキュメントを保存する
fdf_set_ap  -- フィールドの外観を設定する
fdf_set_encoding  -- FDF 文字エンコーディングを設定する
fdf_set_file  -- FDF データを表示する PDF ドキュメントを設定する
fdf_set_flags  -- フィールドのフラグを設定する
fdf_set_javascript_action  -- フィールドの javascript アクションを設定する
fdf_set_on_import_javascript  -- Acrobat が FDF をオープンした際に実行される javascript のコードを追加する
fdf_set_opt  -- フィールドのオプションを設定する
fdf_set_status  -- /STATUS キーの値を設定する
fdf_set_submit_form_action  -- フィールドの投稿フォームアクションを設定する
fdf_set_target_frame  -- フォームの表示対象となるフレームを設定する
fdf_set_value  -- フィールドの値を設定する
fdf_set_version  -- FDF ファイルのバージョン番号を設定する