有关PDF的Unicode问题

时间:2016-09-08 16:08:24

标签: pdf unicode

我编写了一个代码,生成简单的pdf文档。但我无法将unicode字符渲染成pdf。任何建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

假设您在Unicode中有以下String

public static final String CZECH =
        "Podivn\u00fd p\u0159\u00edpad Dr. Jekylla a pana Hyda";
public static final String RUSSIAN =
        "\u0421\u0442\u0440\u0430\u043d\u043d\u0430\u044f "
        + "\u0438\u0441\u0442\u043e\u0440\u0438\u044f "
        + "\u0434\u043e\u043a\u0442\u043e\u0440\u0430 "
        + "\u0414\u0436\u0435\u043a\u0438\u043b\u0430 \u0438 "
        + "\u043c\u0438\u0441\u0442\u0435\u0440\u0430 "
        + "\u0425\u0430\u0439\u0434\u0430";
public static final String KOREAN =
        "\ud558\uc774\ub4dc, \uc9c0\ud0ac, \ub098";

然后,您需要找到能够呈现这些字符的字体程序。例如:

public static final String FONT = "src/main/resources/fonts/FreeSans.ttf";
public static final String HCRBATANG = "src/main/resources/fonts/HANBatang.ttf";

FreeSans是Linux附带的免费字体;它支持很多语言,但不是全部。例如:韩国人不受支持,因此我们也使用HAN Batang。

我们使用这些字体程序来创建PdfFont个对象,我们在Paragraph个对象中使用这些对象:

PdfFont freeUnicode =
    PdfFontFactory.createFont(FONT, PdfEncodings.IDENTITY_H, true);
document.add(new Paragraph().setFont(freeUnicode)
    .add(CZECH).add(" by Robert Louis Stevenson"));
document.add(new Paragraph().setFont(freeUnicode)
    .add(RUSSIAN).add(" by Robert Louis Stevenson"));
PdfFont fontUnicode =
    PdfFontFactory.createFont(HCRBATANG, PdfEncodings.IDENTITY_H, true);
document.add(new Paragraph().setFont(fontUnicode)
    .add(KOREAN).add(" by Robert Louis Stevenson"));

结果显示在以下屏幕截图中:

enter image description here

如您所见,使用iText 7时渲染Unicode非常简单。此示例取自chapter 1教程的iText 7: Building Blocks

如果这不是您要查找的信息,请修正您的问题并说明您使用的工具代替iText,以及使用哪种编程语言。