我想使用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字体。这有什么不对?字体嵌入到文件中,为什么它会错误地显示这个词?
答案 0 :(得分:1)
我试图重现你的问题。我必须将comis.ttf
更改为comic.ttf
。我能够毫无问题地创建正确的PDF。请参阅hello_field.pdf。
但是,我的代码中有一些我不喜欢的东西(众所周知,这会给其他人带来许多问题):你在源文件中放入了非ASCII字符:"Žížalka"
那是没有完成。如果使用错误的编码保存源文件,这些字符将被破坏。如果使用错误的编码编译源文件,这些字符将被破坏。等
我的猜测是你的问题是一个编码问题。您应该用他们的UNICODE符号替换非ASCII字符,如下所示:
不要使用:
textField.setText("Žížalka");
使用:
textField.setText("\u017d\u00ed\u017ealka");
这将避免各种与编码相关的问题。
免责声明:如果不是编码问题,可能还有其他问题。我只是给你最可能的问题原因。它也可能是其他东西,例如旧版iText中的错误。