PDF フォームは、表面ではなく中身を見る
入力可能な PDF は単純そうに見えて、たいてい単純ではありません。どの枠の裏にも AcroForm フィールドがあり、名前は三階層に入れ子になっていることがあり、/Ff という整数のビットはフィールドの種類によって意味が変わり、書き出し値は隣に印字された語とほぼ一致せず、外観ストリームは再生成するビューアーとしないビューアーがあります。PDF フォームフィールド検査はその全部を開いて見せます。
何を報告するか
- 完全名 —
/Parentをたどって連結した/T。address.cityはaddress.cityとして表示され、参照できない裸のcityにはなりません。 - 本当の種類 — テキスト、複数行、コム、パスワード、チェックボックス、ラジオグループ、プッシュボタン、ドロップダウン、リストボックス、署名を、
/FTとフラグビットの両方から判定します。 - 正しい種類でデコードした
/Ffの各ビット。 ビット 26 はテキストフィールドでは RichText、ボタンでは RadiosInUnison です。/FTを見ずにデコードすると意味不明な結果になります。 - 書き出し値。 各ウィジェットの
/AP /N辞書のキーが、チェックボックスやラジオボタンが実際に送信する値です。Yesではなく1、On、製品コードであることがよくあります。 /MaxLen、/Opt、/DAのフォントとサイズ、/Qの配置、/TUのツールチップ、/DVの既定値、そして/AA追加アクション。- 座標 — 下基準のユーザー空間そのままの
/Rectと、上基準のページ座標に直した同じ矩形、さらに/Annots内でのタブ位置。
見つけられる問題
完全名の重複(枠は 2 つ、値は 1 つ)。外観ストリームのないウィジェット。厳密なビューアーでは空欄になり、フラット化も失敗します。CropBox の外にあるウィジェット — 存在し、値も入っているのに見えません。どのフィールドにも属さない孤立ウィジェット。有効になった /NeedAppearances(実質的に「再生成するビューアーでしか値が見えない」という意味です)。
分からないこと
読み取るのは保存された構造です。フォームの JavaScript は実行しないため、計算フィールドはスクリプトが出す値ではなく最後に保存された値を表示します。何らかの規格への適合検証も行いません。
プライバシー
PDF は pdf-lib と pdf.js でブラウザー内で解析されます。アップロードは一切なく、JSON と CSV の書き出しもローカルで生成されます。
Tiny Online Tools







