科技 · 实用指南
PDF 表单已填却打印空白?分清保存值、显示外观和打印可见性
屏幕上的答案、已保存的字段值和可打印文字需要分别核验。四个受控文本字段样本说明,外观流非空也不足以证明正确。

普通 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,相关表单应遵循签发方支持的流程。
