如何将字体设置为TextField

时间:2013-08-22 09:32:37

标签: itext

我想使用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字体。这有什么不对?字体嵌入到文件中,为什么它会错误地显示这个词?

1 个答案:

答案 0 :(得分:1)

我试图重现你的问题。我必须将comis.ttf更改为comic.ttf。我能够毫无问题地创建正确的PDF。请参阅hello_field.pdf

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

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

我的猜测是你的问题是一个编码问题。您应该用他们的UNICODE符号替换非ASCII字符,如下所示:

不要使用:

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

使用:

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

这将避免各种与编码相关的问题。

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