Watch at Ease看見世界,讀懂生活。

科技 · 實用指南

PDF 表單已填卻印出空白?分清儲存值、顯示外觀與列印可見性

畫面答案、儲存欄位值與可列印文字須分別核驗。四個受控文字欄位樣本顯示,外觀串流非空也不足以證明正確。

原創示意圖:分開檢查未簽署 AcroForm 文字欄位的儲存值、控制項外觀與列印可見性。
原創示意圖:分開檢查未簽署 AcroForm 文字欄位的儲存值、控制項外觀與列印可見性。 Watch at Ease

一般 AcroForm 文字欄位應從確切的已儲存檔案入手,對照儲存值、頁面控制項外觀與列印可見性;螢幕截圖不能同時證明三者。

Adobe 現行列印說明指出,「文件」包含表單及輸入資料,「僅表單欄位」不印出底層表單。文字仍消失時,只把「文件」改成「文件與標記」並未完成診斷。

修改前先找出失敗的輸出

記錄檔名或雜湊、填寫應用、接收端閱讀器及列印設定,對照重開畫面、列印預覽及目標輸出的一頁試印。獲准編輯的表單作者可在 Acrobat 檢查欄位可見性;畫面可見未必可列印。

基準樣本儲存 ALPHA,兩個路徑均顯示 ALPHA。清除控制項 Print 旗標後,畫面仍有 ALPHA,但本次 PostScript 列印路徑不輸出欄位文字。這是可見性問題,不代表答案已遺失。

非空外觀仍可能過時

我們把儲存 /V 改成 BETA,保留 ALPHA 外觀。畫面與列印路徑仍顯示 ALPHA。四個樣本都保留同一段165位元組正常外觀串流,因此只檢查 /AP 存在或有資料會漏掉錯配。

確認外觀問題後,由表單產生端在副本上依正確儲存值重新產生外觀,再重開比對。/NeedAppearances 只是請求閱讀器重建,不能證明特定閱讀器已產生正確結果。既有外觀生成答案已說明這項機制。

同時檢查欄位樹與頁面

pypdf 的 get_fields() 讀取 /AcroForm/Fields,頁面 /Annots 提供可見控制項。父子關係很重要,重複欄位尤其如此。同名不代表兩個斷開物件具有正確欄位與控制項關係。

斷開欄位樹的樣本中,標準欄位值為空,另一頁面控制項保留 ALPHA,畫面與列印卻都看似正確。修復前應由產生端核對實際物件關係和值;自動重新掛接未必足夠,重名須明確檢查。

依交付用途重新驗證

可編輯表單輸出後應重開,檢查預期值、控制項關係、可見文字及目標列印結果。靜態副本的要求不同:核驗真正繪入頁面的內容,必要時保留可編輯原件。平面化過時外觀可能固化錯誤文字,而非修復。

這些是受控範例,不是讀者檔案的診斷。使用 Python3.12.14、pypdf6.10.0、ReportLab4.4.9;畫面為 pdftoppm26.05.0,列印為 pdftops24.02.0 加 Ghostscript10.02.1。未測試 Acrobat 介面、實體印表機、簽章或動態 XFA,相關表單請依簽發方支援流程處理。

原創測試結果示意圖:四個合成樣本保留同一外觀位元組,卻有不同儲存值與呈現結果。
原創測試結果示意圖:四個合成樣本保留同一外觀位元組,卻有不同儲存值與呈現結果。 Watch at Ease