【问题标题】:iText doesn't like my special charactersiText 不喜欢我的特殊字符
【发布时间】:2012-02-24 01:14:27
【问题描述】:

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

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

但输出是

a– ...ä...ö...

(我不得不模糊句子,但我想你明白我在说什么......)

不知何故,无法生成这个黑色方块和所有“元音变音”...
使用的字体如下:

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

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

我有点迷路了;有谁知道我可以做些什么来让它工作?

提前致谢并打招呼 吉拉拉斯

----------------更新---------------

所以这里是(部分)代码:

@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("...");
  }

}

我不得不取出一些东西,但我保留了一些元音变字符和其他特殊字符,以便您可以看到问题发生在哪里...... :-)

【问题讨论】:

  • 我跳过了 HttpServletRequest 的部分...除了“■”项目符号外,我都正确显示了
  • 这有点奇怪...... oO 因为它与硬编码字符串没有任何关系,不是吗?至少它不应该......无论如何,这里没有改变任何东西>。

标签: java pdf utf-8 itext diacritics


【解决方案1】:

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

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

【讨论】:

  • 您好,感谢您的回复。不幸的是,它没有改变任何东西:-/
  • 可能需要其他代码来嵌入字体。嵌入所有字体的一个版本:FontFactory.defaultEmbedding = true;另外,Times New Roman 通常是否支持这些字符 :) ?
  • FontFactory.defaultEmbedding = true;也没有解决它:-/ Times New Roman 应该有这些字符,......不过,我不确定,我真的不知道如何找出......?!如果日常使用 Word 和其他东西很常见,那么 Times New Roman 支持这些字符...:-/
  • 我刚刚使用以下代码尝试了 itextpdf 5.1.3(我在 Ubuntu,而不是 Windows): // Document document = new Document(); PdfWriter.getInstance(document, new FileOutputStream(filename));文档.open();字体字体 = new Font(Font.FontFamily.TIMES_ROMAN, 12, Font.BOLD);段落 pg = new Paragraph(); pg.setFont(字体); pg.add("测试 ■ ...ä...ö... 测试");文档.add(pg);文档.close(); // 我得到了正确的两个变音符号。黑色块未呈现,但它可能不是 Times 字体的一部分
  • 我也试过你的代码;有效。现在我完全糊涂了;我的代码确实 - 当然 - 没有别的......但不起作用......试图再次将字体更改为您在示例中使用的字体;没有成功:-/我只是不明白可能出了什么问题,因为一切都是-期望我添加的单词-相同...
猜你喜欢
  • 2019-01-27
  • 1970-01-01
  • 2021-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-26
相关资源
最近更新 更多