iText diacritic字符,如D,M等,无法在PDF上正确显示

时间:2016-07-06 11:37:45

标签: java pdf itext

当我尝试创建包含标题中的字符的PDF时,我遇到了iText的问题。 会发生什么情况是,重音circonflexe不能正确地位于字母上方,而是紧挨着它或(取决于我使用的字体)稍微“合并”到它(请参阅下面我使用FreeSans的屏幕截图)。

FreeSans

我知道有这个问题的所有字符都是“复合”字符。我的意思是它们由两个unicode字符组成。例如,“D”表示为“\ u0044 \ u0302”,而所有常用字符当然表示为“\ uXXXX”。 所以我很确定它与此有关。 例如,具有正常unicode表示的“Ê”显示得很好。

这是一个很小的代码片段,希望包含您需要知道的所有内容:

String TEXT = "\u0044\u0302 \u004A\u030C \u004C\u0302 \u004D\u0302 \u004E\u0302 \u0064\u0302 \u006C\u0302 \u006D\u0302 \u006E\u0302";//D̂ J̌ L̂ M̂ N̂ d̂ l̂ m̂ n̂
BaseFont bf = BaseFont.createFont("FreeSans.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
document.add(new Paragraph(TEXT, font));

任何帮助都将受到高度赞赏。

提前致谢!

1 个答案:

答案 0 :(得分:3)

您需要将iText 7与模块pdfCalligraph一起使用。这种构图需要访问OTF表,以根据大小,高度等正确对齐字符。

有关pdfCalligraph的更多信息,请参阅chapter 2 of the "iText 7: building blocks"教程(请滚到本章末尾)以了解其工作原理。您可以获得pdfCalligraph here的免费试用版。