Используйте FileOutputStream для создания PDF-файла UTF-8

Я использую JasperReports и DynamicReports с этим фрагментом кода Java для создания отчета в формате PDF, который содержит символы utf-8, проблема заключается в том, что файл PDF не содержит символов utf-8 вообще, как если бы они были заменены на "". Есть ли что-то, что я должен знать при использовании OutputStream для создания файла utf-8?

    public void toPdf(String path){
        OutputStream outHtml;
        try {
            outHtml = new FileOutputStream(path);

            jasperBuilder.toPdf(outHtml);
        } catch (Exception e1) {
            logger.error("failed to create PDF", e1);
        }
}

это может быть примечательно, что создание файлов XLS и HTML не сталкивается с такой проблемой.

обратите внимание, что есть много строк кода под jasperBuilder.toPdf(outHtml); что я проследил, и нигде в тех строках мои символы utf-8 не удаляются. так что я думаю, что дьявол в outHtml = new FileOutputStream(path);

2 ответа

Решение

Мне удалось ее решить, это была проблема со шрифтами и кодировкой. только что следовал учебник здесь, но изменить <pdfEncoding>UTF-8</pdfEncoding> в <pdfEncoding>Identity-H</pdfEncoding> в fonts.xml

<fontFamilies>
  <fontFamily name="FreeUniversal">
    <normal>/home/moien/tahoma.ttf</normal>
    <bold>/home/moien/tahoma.ttf</bold>
    <italic>/home/moien/tahoma.ttf</italic>
    <boldItalic>/home/moien/tahoma.ttf</boldItalic>
    <pdfEncoding>Identity-H</pdfEncoding>
    <pdfEmbedded>true</pdfEmbedded>
  </fontFamily>
</fontFamilies> 

теперь у меня есть еще одна проблема, сделать URL шрифта относительным!

FileOutputStream совершенно не зависит от "материала", который записывается в него. Он просто пишет байты. Если символы удаляются или искажаются, то это вызвано тем, что генерирует байты для записи в поток.

В этом случае мои деньги будут на пути, который вы настроили / использовали jasperBuilder объект до запуска этого кода.

Другие вопросы по тегам