Международные символы не отображаются правильно в экспорте Java PDF - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь экспортировать китайские / японские символы и польские символы в 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

Есть идеи, почему это может происходить?

...