JasperReports: Как добавить шрифт не в путь к классу приложения - PullRequest
6 голосов
/ 30 июня 2010

Я пытаюсь использовать шрифт, который не установлен в моей локальной ОС, с JasperReports. Отчет о яшме использует таким образом:

<textField>  
  <reportElement x="0" y="0" width="137" height="20"/>  
        <textElement>  
    <font fontName="Corbel" size="12"/>  
    </textElement>  
    <textFieldExpression class="java.lang.String"><![CDATA[$F{something}]]></textFieldExpression>  
</textField>

Шрифт с именем Corbel был экспортирован как расширение шрифта (с использованием iReport) и содержится в файле (Corbel.jar), в папке, в моей системе. Я добавляю это расширение в путь к классам приложения, используя следующий код:

ClassLoader cl = new URLClassLoader(new URL[] {new URL("file:///D:/path/to/Corbel_jar_folder/")});  
param = new HashMap();    
param.put(JRParameter.REPORT_CLASS_LOADER, cl);  
jasperReport = JasperCompileManager.compileReport("d:/path/to/Report_with_Corbel_font.jrxml");  
jasperPrint = JasperFillManager.fillReport(jasperReport, param, new JREmptyDataSource());

После заполнения отчета я экспортирую его, используя JRPdfExporter. Однако в результирующем файле PDF этот элемент не имеет примененного шрифта Corbel. Я не включил экспорт PDF, потому что я думаю, что проблема где-то с заполнением. Я искал и читал многочисленные сообщения и вопросы, связанные с использованием / включением шрифтов (расширения i.e.font) в JasperReports; все же я не знаю, где находится ошибка или проблема. Любая помощь будет принята с благодарностью.

Заранее спасибо! (извините за плохой отступ кода, и я надеюсь, что я включил достаточно деталей)

Ответы [ 3 ]

7 голосов
/ 05 июля 2010

Проблема заключалась в том, что загрузка jar-файлов расширений шрифтов выполняется из загрузчика классов контекста потока и из JRParameter.REPORT_CLASS_LOADER или JRExporterParameter.CLASS_LOADER.

Следовательно, в моем случае текущий (начальный) загрузчик классов потока должен был быть сохранен, мы должны были сделать что-то вроде Thread.currentThread().setContextClassLoader(cl), где cl был контекст приложения на основе JasperReports изатем загрузчик классов контекста потока был возвращен к исходному.

На вопрос был дан ответ, и подробности доступны здесь .

Надеюсь, этот ответ поможет другим, сталкивающимся с похожими проблемами (шрифтами).

0 голосов
/ 09 апреля 2019

Мы могли бы использовать шрифты Google Noto с Jasper с этими шагами

  1. Упаковка семейства NotoSans в файл jar, как указано в документации по Jasper.

  2. Загрузил эту банку в наш репозиторий Maven

  3. Определите зависимость в pom
<dependency>
  <groupId>com.crunchtime.shared.fonts</groupId>
  <artifactId>notosans</artifactId>
  <version>1.0</version>
</dependency>
А потом используйте в нашем.Я думаю, что это самая сложная часть, но именно так мы и сделали

приватная статическая финальная строка DEFAULT_PDF_STYLE = "defaultPdf";

приватная статическая финальная строка DEFAULT_FONT_FAMILY = "NotoSans";

приватная статическая конечная строка CJK_FONT = "fonts / NotoSansCJKtc-Regular.otf";

   if (language-other-than-English) {
        defaultStyle.setPdfFontName(CJK_FONT);
    } else {
        defaultStyle.setFontName(DEFAULT_FONT_FAMILY);
    }

Мы видели это исключение нулевого указателя, но ключом было установить явно установить шрифт дляPDF

0 голосов
/ 01 августа 2018

Отчеты Jasper: добавление пользовательских шрифтов

  1. Получите файлы шрифтов, которые вы хотите использовать (TTF, EOT, SVG или WOFF (OTF, также преобразованный в TTF))
  2. Добавьте шрифты в Jaspersoft Studio (или iReport) с помощью пользовательского интерфейса.(Окно-> Настройки-> Jaspersoft Studio-> Шрифты)

    Add Font

    Вам необходимо указать детали, как на изображении.Специально поле имени шрифта PDF вводит в заблуждение.Нам нужно указать путь для этого шрифта в файле font-extention.jar, который мы создадим на следующем шаге.

    Теперь вы можете просмотреть шрифт в своем отчете.

    Font Added

  3. Экспортируйте шрифты в файл fonts-extention.jar для использования в вашем приложении.Выберите и экспортируйте необходимые шрифты.(Окно-> Настройки-> Jaspersoft Studio-> Шрифты-> Выбрать и экспортировать)

  4. Позаботьтесь об интеграции jar в свою сборку.Если вы используете maven для своего проекта, вы можете интегрировать его следующим образом.

        <dependency>
           <groupId>local.jasperFont</groupId>
           <artifactId>local.jasperFont</artifactId>
           <version>1.0</version>
           <scope>system</scope>
           <systemPath>${basedir}/src/main/resources/reports/fonts-extension.jar</systemPath>
        </dependency>

и добавить fonts-extension.jar в каталог ресурсов проекта / отчетов.

...