Chrome中PDF表单字段聚焦后仍显示原始值的问题求助
Chrome中可填写PDF表单字段渲染异常问题排查
问题现象
- 首次在表单字段输入内容(如连续输入"bbbbbbb")后点击离开,显示正常
- 再次点击该字段输入新内容时,原始值会持续显示在新值后方(例如在字段开头输入"aaaaaaa",仍能看到后方的"bbbbbbbb")
环境差异
- 仅Chrome浏览器出现此问题,Firefox中显示正常
- Acrobat Reader打开该PDF时崩溃,但打开其他带表单的PDF也崩溃,推测与此问题无关
PDF源代码
%PDF-1.4 1 0 obj << /Type /Catalog /Version /1.4 /Pages 2 0 R /Acroform << /NeedAppearances false /Fields [5 0 R ] >> /Names 8 0 R >> endobj 2 0 obj << /Type /Pages /Kids [11 0 R ] /Count 1 >> endobj 3 0 obj << /Type /Font /Subtype /Type1 /Encoding /WinAnsiEncoding /BaseFont /Helvetica >> endobj 4 0 obj << /Length 57 /Type /XObject /Subtype /Form /BBox [0 0 150 30 ] /Resources << /ProcSet [/PDF /Text /ImageC /ImageB /ImageI ] >> /Matrix [1 0 0 1 0 0 ] >> stream /Tx BMC BT /Helvetica 11 Tf 0 g 5 5 Td () Tj ET EMC endstream endobj 5 0 obj << /Type /Annot /Subtype /Widget /FT /Tx /Rect [150 395 300 425 ] /T (yourname) /DA (/Helvetica 11 Tf 0 g) /F 4 /Ff 0 /DR << /Font << /Helvetica 3 0 R >> >> /AP << /N 4 0 R >> /P 11 0 R >> endobj 6 0 obj [] endobj 7 0 obj << /Names 6 0 R >> endobj 8 0 obj << /Dests 10 0 R >> endobj 9 0 obj [] endobj 10 0 obj << /Names 9 0 R >> endobj 11 0 obj << /Type /Page /LastModified (D:20240326234624+01'00') /Resources << /ProcSet [/PDF /Text ] /Font << /F1 13 0 R >> >> /MediaBox [0 0 595 842 ] /Contents [12 0 R ] /Annots [5 0 R 5 0 R ] /Parent 2 0 R >> endobj 12 0 obj << /Length 101 >> stream 0.8 g 20 20 555 802 re f /F1 14 Tf 0 g BT 40 400 Td (Fill your name) Tj ET 1 g 150 395 150 30 re f endstream endobj 13 0 obj << /Type /Font /Encoding /WinAnsiEncoding /Subtype /Type1 /BaseFont /Helvetica >> endobj xref 0 14 0000000000 65535 f 0000000015 00000 n 0000000146 00000 n 0000000205 00000 n 0000000302 00000 n 0000000545 00000 n 0000000747 00000 n 0000000766 00000 n 0000000800 00000 n 0000000835 00000 n 0000000854 00000 n 0000000889 00000 n 0000001107 00000 n 0000001260 00000 n trailer << /ID [<36613663383332633536383565333731> <62306330656135306564363564633233> ] /Size 14 /Root 1 0 R >> startxref 1358 %%EOF
生成背景
使用旧版PHP Zend PDF库生成该PDF文件。
问题原因分析
查看PDF源代码发现,页面对象(11 0 obj)的/Annots数组中重复引用了同一个表单控件对象(5 0 R出现两次):
/Annots [5 0 R 5 0 R ]
这会导致Chrome渲染时,两个完全相同的表单控件叠加显示。第一次输入的内容保存在底层控件中,第二次编辑时顶层控件显示新输入内容,但底层控件的旧内容未被清除,因此会出现新旧内容同时显示的异常。
解决方案
修改Zend PDF生成代码,确保每个表单字段仅被添加到页面的/Annots数组一次,避免重复引用同一个Widget注释对象。
内容的提问来源于stack exchange,提问作者Edhel
相关产品推荐
相关产品推荐

