文本字段中的重叠字符 iText PDF

Posted

技术标签:

【中文标题】文本字段中的重叠字符 iText PDF【英文标题】:Overlapping characters in text field iText PDF 【发布时间】:2013-12-05 13:20:52 【问题描述】:

我有包含一些字符的文本字段的 PDF。但是语言特定的字符是重叠的。 当它获得焦点时,文本会更改并正确显示。失去焦点时,显示不正确。 编辑文本时也能正确显示。

文件test_extended_filled.pdf见下文

我是如何创建 PDF 的:

    在 OpenOffice Draw 4.0.1 中创建了 odg 模板 -> test.odg 导出为 PDF -> test.pdf 使用 Adob​​e Acrobat X Pro 10.0.0 编辑 test.pdf 并使用扩展功能重新保存(需要保存在本地 PC 上)-> test_extended.pdf 由 java (pdfstamper) 填写的表格 -> test_extended_filled.pdf

奖励:当我在 java 中通过 pdfstamper 更改字体时,看起来更改也仅应用于焦点文本。 -> test_extended_filled_font_size.pdf

注意:当我从 2 中填写 test.pdf 时,它会正确显示 -> text_filled.pdf

附加文件(去下载部分): https://rapidshare.com/share/ACC0D81E9235A6DA2CC2353BD21A4C37

添加后

stamper.getAcroFields().addSubstitutionFont

更好,但有些字符仍然重叠。 -> test_extended_filled_font_size_with_substitution_font.pdf http://rapidshare.com/share/0EE3238F37E9115C36A7A74706B09826

有什么想法吗?

【问题讨论】:

这个问题与谁使用哪种字体创建字段外观有关。因此,除了文件之外,您能否发布字体填充的相关部分?话虽如此,我看到您使用的是 iText 5.1.3。请考虑更新,同时修复了有关表单填写和 NeedAppearances 支持的问题。 请看我对@BrunoLowagie 的回答 我稍后再看。 【参考方案1】:

请查看FillFormSpecialChars 示例和resulting PDF。

Open Office 并不能真正创建漂亮的表单。正如 mkl 已经指出的那样,NeedAppearances 标志可能会导致问题,字段的边框被绘制到页面内容上,而不是作为小部件注释的一部分,等等......

在您的情况下,您定义的字体对于特殊字符不是最佳的。使用替代字体并不理想,因为您可以清楚地看到绘制字形并不是什么大问题。问题是指标都是错误的。就好像特殊字符有 0 个字形单位的提前量。在这种情况下,您应该使用setFieldProperty() 方法更改字体。

【讨论】:

感谢您的回答。但是当文本字段获得焦点时,resulting PDF 显示不正确。您也不能填充文本字段,也不能将填充的 pdf 保存到本地计算机。我将 iText 升级到 5.4.5。使用 stamper.getAcroFields().setFieldProperty("test", "textfont", normalFont, null); 破坏 PDF 的扩展功能。 stamper.getAcroFields().setGenerateAppearances(true); 似乎没有效果。有无结果都一样。 我制作了一个名为 PDFFill 的小型 Eclipse 项目 :) 演示了整个情况。 PDFFill 好的,我忽略了阅读器启用部分。阅读器启用涉及数字签名(使用 Adob​​e 的私钥),并且干预那些现有的表单字段可能会破坏该签名,即使在附加模式下使用 PdfStamper 也是如此。这让我想到了一个问题:如果您仍然使用 Acrobat 来启用阅读器,为什么不使用 Acrobat 创建表单域?这将避免修复 Open Office 创建的表单所需的所有管道...... 我使用了 Adob​​e LiveCycle 设计器,所有工作都符合预期。 Open Office Designer 仅适用于没有扩展功能的 PDF。谢谢你的帮助。

以上是关于文本字段中的重叠字符 iText PDF的主要内容,如果未能解决你的问题,请参考以下文章

iText PDF中的Unicode字符

iText PDF坏字符转换

如何使用 iText 获取 Pdf 表单字段的自定义格式脚本?

如何使用 iText7 检测 PDF 中的 fontawesome 图标

使用 iText 7 将文本环绕在单元格中的图像周围

iText如何提取PDF中的数据——1. 总览