【问题标题】:How to set a font to a TextField如何将字体设置为 TextField
【发布时间】:2013-08-22 09:32:37
【问题描述】:

我想为使用 PdfStamper 类添加的 TextField 设置字体。我的代码如下:

final TextField textField = new TextField(
        stamper.getWriter(), 
        new Rectangle(llx, lly, urx, ury), 
        "Name"
);
textField.setOptions(TextField.READ_ONLY);
textField.setAlignment(Element.ALIGN_RIGHT);

final BaseFont bf = BaseFont.createFont(
    "c:/windows/fonts/comic.ttf",
    BaseFont.IDENTITY_H, 
    BaseFont.EMBEDDED
); 
bf.setSubset(false);

textField.setFont(bf);
textField.setFontSize(12);
textField.setText("Žížalka");

stamper.addAnnotation(textField.getTextField(), 1);

我将 bf.setSubset 设置为 false,因为我希望以后能够使用 javascript 更改字段值。

好吧,生成了 PDF 文件,并且该字段按预期包含具有 Comic Sans MS 字体的单词,但是当我单击该字段时,它变为一组奇怪的字符,尽管它仍然是 Comic Sans MS 字体。这里有什么问题?字体是嵌入到文件中的,为什么会画错字呢?

【问题讨论】:

  • 请提供一个示例 PDF 来说明问题。此外,您在哪个程序中单击该字段以见证它变为一组奇怪的字符? Adobe阅读器?哪个版本?
  • 如何提供PDF文件?我在这里看不到任何“附加文件”选项。它是 Adob​​e Reader 11.0.3。
  • StackOverflow 不提供通用文件上传机制。通常此类文件由其他文件共享媒体提供(最好是没有广告或需要登录的文件),例如通过 DropBox 或 Google,问题或评论中包含一个链接。

标签: itext


【解决方案1】:

我试图重现您的问题。我不得不将comis.ttf 更改为comic.ttf。我能够毫无问题地创建外观正确的 PDF。见hello_field.pdf

但是,我不喜欢您的代码中的某些内容(众所周知,这会给其他人带来很多问题):您在源文件中放入了非 ASCII 字符:"Žížalka"

那是没有完成。如果您使用错误的编码保存源文件,这些字符将会损坏。如果您使用错误的编码编译源文件,这些字符将会损坏。等等。

我的猜测是您的问题是编码问题。您应该将非 ASCII 字符替换为它们的 UNICODE 符号,如下所示:

不要使用:

textField.setText("Žížalka");

用途:

textField.setText("\u017d\u00ed\u017ealka");

这样可以避免各种编码相关的问题。

免责声明:如果不是编码问题,则可能存在其他问题。我只是给你最可能的问题原因。也可能是其他原因,例如旧版 iText 中的错误。

【讨论】:

  • 感谢您的更正 - 在我的代码中也是“漫画”。我不知道我从哪里得到“comis”。嗯,看起来是 Acrobat 阅读器的问题,因为您提供的 PDF 在我的 PC 上也损坏了。无论我单击“Hello World”还是“Žížalka”,带有“Žížalka”的字段的值都会更改为一些有趣的字符。我试图将其发送给我的同事,他报告了同样的行为。我们都有Windows 7(捷克本地化),我有本地化的Acrobat reader,我的同事有英文版。
  • 顺便说一句,不管是“Žížalka”还是“Zizalka”,字段值也会被破坏。
  • 对不起,我看错了你的问题。我认为打开文档时字符显示不正确。我忽略了当您单击字符时字符错误的事实。现在我也看到了这种行为。
  • 我已将字体更改为comicbd.ttf,现在问题似乎消失了。你能重现吗?
  • 是的,但只是部分。当我第一次点击它时,它会变小一点,但没关系。然后我在其他地方单击并再次在该字段中单击。然后它像以前一样出错。您可以尝试例如'Verdana' 字体,它有同样的问题。
猜你喜欢
  • 2011-03-30
  • 1970-01-01
  • 1970-01-01
  • 2021-04-16
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-24
相关资源
最近更新 更多