Используйте 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
объект до запуска этого кода.