【发布时间】:2014-01-29 07:07:16
【问题描述】:
我正在创建带有中文预填充值的 PDF,但是当打开 PDF 时,所有包含中文文本的文本字段都是空的。聚焦文本字段时,中文文本可见,但在取消聚焦字段时再次隐藏。可能是什么问题?
【问题讨论】:
标签: localization itextsharp chinese-locale
我正在创建带有中文预填充值的 PDF,但是当打开 PDF 时,所有包含中文文本的文本字段都是空的。聚焦文本字段时,中文文本可见,但在取消聚焦字段时再次隐藏。可能是什么问题?
【问题讨论】:
标签: localization itextsharp chinese-locale
请分享更多信息,因为 iText 不生成外观的原因可能不止一个。
A. 第一个原因在 StackOverflow 问题“AcroForm values missing after flattening”中进行了解释。在这种情况下,PDF 包含一个指示 iText not 生成外观的参数,这可以解释为什么在单击该字段之前您看不到任何值,在这种情况下,查看器将创建它们.
B. 第二个原因在my book 的第 8.3.3 节(标题为“文本字段和字体”)中进行了解释。在这种情况下,PDF 中的参数不会阻止创建字段外观,但 iText 无法这样做,因为您没有提供知道如何显示中文字符的字体。
参见本书的图 8.3 和 8.4。
在图 8.3 中,您可以看到上方窗口中没有显示中文文本。通过固定表格(使用两种不同的策略),中文文本出现在下面的两个窗口中。请注意,在中间窗口的情况下,中文文本不会出现在所有查看器中。
在图 8.4 中,您会看到韩文文本既没有显示在上方窗口中,也没有显示在第三个窗口中。在所有其他窗口中,使用了不同的策略来解决此问题:
在关于 SO 的答案中讨论所有不同的策略会让我们走得太远。相反,请查看TextFontFields 示例(对于C# 版本,请查看ported examples)。我的猜测是您将从AddSubstitutionFont() 方法中受益最多,前提是您使用的字体的子集将嵌入到文档中(在示例中使用了arialuni.ttf)。
对于A.,该现象也涉及其他语言。在 B. 的情况下,参数是正确的,但您没有提供可用于生成外观的字体。
【讨论】: