Java PDF导出中的国际字符未正确显示

时间:2019-03-26 15:14:27

标签: java itext flying-saucer

我正在尝试导出中文/日语字符并将波兰语字符抛光为pdf。但是,只有这两种作品之一,而不是两者兼而有之,我也不明白为什么。 这是程序:

public class Japanese {

public static void main(String[] args) throws Exception {
    StringBuffer writer = new StringBuffer();
    writer.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1?DTD/transitional.dtd\">\n" + 
            "<html>\n" + 
            "<head>\n" + 
            "<META http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n" + 
            "<title>some title.</title>\n" + 
            "\n" + 
            "<style type=\"text/css\">\n" + 
            "     .myDiv\n" + 
            "   {\n" + 
            "         font-family: \"Noto Sans CJK TC Regular\", Sans-Serif;\n" +
            "     }\n" + 
            "</style>\n" + 
            "</head>\n" + 
            "<body> <div class=\"myDiv\">" + 
            "Chinese: 百威英博雪津(三明)啤酒有限公司 <br />" + 
            "Japanese: 日本にほんでは、近頃ちかごろ多おおくの人ひとが保育園ほいくえん問題もんだいについて話はなしている。 <br />" +  
            "Polish: ąćęł <br />" +
            "German: TüööäE_3STß <br />" +
            "Hello World: 你好,世界 <br />" + 
            "\n" + 
            "    <br />\n" + 
            "\n" + 
            "END TEXT\n</div>" + 
            "<br />\n" + 
            "<br />\n" + 
            "</body></html>");
    String  pdfContent = writer.toString();

    ITextRenderer renderer = new ITextRenderer();           

    ITextFontResolver resolver = renderer.getFontResolver();

    resolver.addFont("lib/NotoSans-Regular.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
    resolver.addFont("lib/NotoSansCJKtc-Regular.otf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
    renderer.setDocumentFromString(pdfContent);
    renderer.layout();
    FileOutputStream os = new FileOutputStream("output.pdf");
    renderer.createPDF(os);

    System.out.println("Finished");
}

上面的程序创建带有正确日文/中文字符的pdf。为此,我将这一行保持不变:

" font-family: \"Noto Sans CJK TC Regular\", Sans-Serif;\n" +

但是未显示波兰语字符,仅显示日文/中文。如果我将上面的行更改为:

" font-family: \"Noto Sans\", Sans-Serif;\n" +

然后未显示中文/日语,仅显示了波兰语。

我希望这行代码都能正确显示:

" font-family: \"Noto Sans\", \"Noto Sans CJK TC Regular\", Sans-Serif;\n" + 

但是只能正确显示抛光字符。这里:https://www.google.com/get/noto/help/guidelines/指出,这是实现此目标的正确方法:

font-family: "Noto Sans", "Noto Sans CJK JP", sans-serif;

那为什么不起作用? 我正在使用以下库:

  • flying-saucer-core-9.0.8.jar
  • flying-saucer-pdf-9.0.8.jar
  • itext-2.1.7.jar

知道为什么会这样吗?

0 个答案:

没有答案