テクノロジー · 実用ガイド

入力済みPDFの印刷が空白に?保存値・外観・印刷表示を分けて確認

見える回答、保存された値、印刷される文字は別の確認事項。4つの制御したテキスト欄で、外観ストリームが空でなくても不十分な理由を調べた。

オリジナルイラスト:未署名AcroFormテキスト欄の保存値・外観・印刷表示を区別。
オリジナルイラスト:未署名AcroFormテキスト欄の保存値・外観・印刷表示を区別。 Watch at Ease

通常のAcroFormテキスト欄では、正確な保存済みファイルの値、ウィジェットの外観、印刷表示を比較する。スクリーンショットだけで3つすべては確認できない。

Adobeの現行印刷案内ではDocumentはフォームと入力データを含み、Form Fields onlyは下地を省く。文字が消える場合、Document and Markupsに変えるだけでは原因を確定できない。

編集前にどの出力が失敗したか確認

ファイル名またはハッシュ、入力アプリ、受信側ビューア、印刷設定を記録する。開き直した画面、印刷プレビュー、対象出力での1ページを比べよう。権限のあるフォーム作成者はAcrobatで表示設定を確認できる。画面表示と印刷可否は同じではない。

基準例はALPHAを保存し両経路で表示した。Printフラグを解除すると画面には残ったが、今回のPostScript印刷経路では欄の文字が消えた。表示設定の問題であり、保存回答が失われた証拠ではない。

空でない外観も古い場合がある

保存/VだけをBETAに変え、ALPHAの外観を保持したところ、画面と印刷はともにALPHAだった。全4例で同じ165バイトの通常外観ストリームが残ったため、/APの存在やバイト数だけでは不一致を見逃す。

外観の問題と確認したら、作成元がコピー上で正しい保存値から外観を再生成し、開き直して比較する。/NeedAppearancesはビューアへの再生成要求であり、正しい表示が実行された証明ではない。この仕組み自体は既存の回答でも説明されている。

ツリーとページの両方を見る

pypdfのget_fields()は/AcroForm/Fieldsを読み、ページの/Annotsは表示ウィジェットを示す。反復欄などでは親子関係が重要だ。同名だけで、切り離された2つのオブジェクトが正しいフィールド関係を持つと判断できない。

切り離したツリーの例では正規フィールド値が空なのに別のページウィジェットはALPHAを保持し、画面も印刷も正しく見えた。修復前に作成元が実際の関係と値を照合する。自動再接続だけでは足りず、重複名の確認も必要だ。

納品用途に合わせて再検証する

編集可能なフォームは出力を開き直し、期待値、ウィジェット関係、可視文字、対象の印刷結果を確認する。静的コピーでは実際にページへ描画された内容を確認し、必要な編集用原本を残す。古い外観の平坦化は誤った文字を固定することがある。

これは制御例であり、読者の文書の診断ではない。Python3.12.14、pypdf6.10.0、ReportLab4.4.9、画面pdftoppm26.05.0、印刷pdftops24.02.0とGhostscript10.02.1を使用。Acrobat画面、実機プリンター、署名、動的XFAは未検証で、発行元の対応手順を使う。

オリジナル試験結果イラスト:同じ外観バイトを保持する4つの合成例でも保存値と描画結果は異なる。
オリジナル試験結果イラスト:同じ外観バイトを保持する4つの合成例でも保存値と描画結果は異なる。 Watch at Ease