1

我想为使用 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 字体。这里有什么问题?字体嵌入到文件中,为什么它会错误地绘制单词?

4

1 回答 1

1

我试图重现你的问题。我不得不更改comis.ttfcomic.ttf. 我能够毫无问题地创建外观正确的 PDF。请参阅hello_field.pdf

但是,您的代码中有一些我不喜欢的地方(众所周知,它给其他人带来了很多问题):您将非 ASCII 字符放入源文件中:"Žížalka"

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

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

不要使用:

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

利用:

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

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

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

于 2013-08-22T10:39:11.937 回答