Джаспер отчет на нескольких языках - не может отображать шрифт при генерации PDF при весенней загрузке - PullRequest
6 голосов
/ 12 июня 2019

Я создаю многоязычный отчет с использованием JasperReports в Java.

Когда я генерирую PDF, некоторые языки не отображаются правильно.

enter image description here

Принимая во внимание, что когда я генерирую Excel, отчет генерируется правильно с правильным языком.

enter image description here

поиск в интернете обнаружил, что шрифт PDF не поддерживается.

  • поэтому я добавил noto sans шрифт.
  • создание собственного файла шрифта jar из jaspar studio .
  • добавлено в classpath.

здесь мой код установлен на шрифт:

 Style rowStyle = new Style();
 Font font = new Font(FONT_SIZE_SMALL, "Noto Sans", false, false, false);
 font.setPdfFontName("Noto Sans");
 font.setPdfFontEncoding(Font.PDF_ENCODING_Identity_H_Unicode_with_horizontal_writing);
 font.setPdfFontEmbedded(false);
 rowStyle.setFont(font);

есть идеи как решить?

Ответы [ 2 ]

5 голосов
/ 22 июня 2019

Вы пытались настроить ведение журнала отчетов DEBUG jasper, чтобы проверить, какой шрифт используется при рендеринге PDF?(пример настройки log4j ниже)

<category name="net.sf.jasperreports">
    <priority value="DEBUG" />
</category>

Например, вы должны увидеть журнал отладки шрифта, загружаемого jasper:

DEBUG SimpleFontFace:177 - Loading font fonts/ARIALUNI.TTF

И если вы используете расширение шрифта jasper (описано ниже), вы должны увидеть что-то вроде:

 DEBUG FontExtensionsRegistry:88 - Loading font extensions from net/sf/jasperreports/fonts/jasperreports-fonts.xml

Включаете ли вы шрифт в classpath?Я успешно использовал пользовательский файл jar, похожий на тот, который описан в этом посте в документации: https://community.jaspersoft.com/wiki/adding-fonts-embedding-pdf

Я также попробовал бы setPdfFontEmbedded (true).В созданном PDF-файле вы можете определить, включен ли шрифт в отчет, если открыть PDF-файл в Adobe Acrobat Reader, и посмотреть, указан ли он в разделе «Файл» -> «Свойства» -> вкладка «Шрифты» (см. Скриншот).Он должен иметь (Embedded) или (Embedded subset) рядом с именем шрифта.enter image description here

Редактировать

Вышеперечисленные шаги могут помочь отладить подобные проблемы.Оказывается, что шрифт «Noto Sans» не поддерживает индийские символы, хотя использование «Arial Unicode MS» работает.

В Docs вы можете увидеть, сколько языков поддерживается.

0 голосов
/ 25 июня 2019
--Use below code 

 `Style rowStyle = new Style();
 Font font = new Font(FONT_SIZE_SMALL, "Arial Unicode MS", false, false, false);
 font.setPdfFontName("Arial Unicode MS");
 font.setPdfFontEncoding(Font.PDF_ENCODING_Identity_H_Unicode_with_horizontal_writing);
 font.setPdfFontEmbedded(false);
 rowStyle.setFont(font);`
...