iText不喜欢我的特殊角色

时间:2012-02-01 10:42:56

标签: java pdf utf-8 itext diacritics

我正在尝试使用iText生成pdf文件 文件生成得很好,但我似乎可以使用像ä,ö,...这样的特殊字符 我想写的句子是(例如)

  

■...ä......ö......

但输出是

  

â€......Ã...... ...

(我不得不模糊句子,但我猜你看到我在说什么......)

不知何故,这个黑色块事物和所有“Umlaute”都无法生成...
使用的字体如下:

private static Font smallBold = new Font(Font.FontFamily.TIMES_ROMAN, 12,
  Font.BOLD);

所以没有这些字符的字体应该没有问题...
我正在使用IntelliJ Idea进行开发,.java文件的编码设置为UTF-8,所以也应该没有问题......

我有点迷失在这里;有谁知道我可以做些什么才能让它发挥作用?

提前致谢并问候 gilaras

--------------- UPDATE ---------------

所以这是(部分)代码:

@Controller
public class Generator {
  ...
  Font font = new Font(Font.FontFamily.TIMES_ROMAN, 9f, Font.BOLD);
  ...

  Paragraph intro = new Paragraph("Ich interessiere mich für ...!", font_12_bold);

  Paragraph wantContact = new Paragraph("■ Ich hätte gerne ... ", font); 

  ...

  Phrase south = new Phrase("■ Süden    □ Ost-West  ...");

  ...


  @RequestMapping(value = "/generatePdf", method = RequestMethod.POST)
  @ResponseBody
  public String generatePdf(HttpServletRequest request) throws IOException, DocumentException, com.lowagie.text.DocumentException {
    Document document = new Document();
    PdfWriter.getInstance(document, new FileOutputStream(FILE));
    addMetaData(document);
    document.open();
    addContent(document, request);
    document.add(new Paragraph("äöü"));
    document.close();
    return "";
  }

  private void addContent(Document document, HttpServletRequest request)
      throws DocumentException {
    Paragraph preface = new Paragraph();
    preface.setAlignment(Element.ALIGN_JUSTIFIED);
    addEmptyLine(preface, 1);
    preface.add(new Paragraph("Rückantwort", catFont));
    addEmptyLine(preface, 2);
    preface.add(intro);
    addEmptyLine(preface, 1);

    if (request.getParameter("dec1").equals("wantContact")) {
      preface.add(wantContact);
    } else {
      ...
    }
    document.add(preface);
  }

  private static void addEmptyLine(Paragraph paragraph, int number) {
    for (int i = 0; i < number; i++) {
      paragraph.add(new Paragraph(" "));
    }
  }

  private static void addMetaData(Document document) {
    document.addTitle("...");
    document.addSubject("...");
    document.addKeywords("...");
    document.addAuthor("...");
    document.addCreator("...");
  }

}

我不得不拿出一些东西,但我保留了一些变音字符和其他特殊字符,这样你就可以看到问题出现的地方......: - )

1 个答案:

答案 0 :(得分:2)

您可能想尝试使用此技术嵌入字体:

BaseFont times = BaseFont.createFont(BaseFont.TIMES_ROMAN, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font font = new Font(times, 12, Font.BOLD);