Внешний шрифт iReport

Я пытаюсь использовать внешний шрифт в документе PDF. У меня нет проблем с его использованием в iReport после его установки через Настройки -> Шрифты -> Установить новый шрифт.

Проблема в том, что когда я экспортирую новый шрифт в качестве расширения и добавляю этот jar в путь к классам проекта java - PDF не может быть сгенерирован и завершается с ошибкой

JRFontNotFoundException: Font 'Arial Custom' is not available to the JVM exception

Что я делаю неправильно? Спасибо

ОБНОВЛЕНИЕ №1:

jasperreports_extensions.properties

net.sf.jasperreports.extension.registry.factory.fonts=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
net.sf.jasperreports.extension.simple.font.families.ireportfamily1329192368547=fonts/fontsfamily1329192368547.xml

семейство шрифтов1329192368547.xml

<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>

   <fontFamily name="Arial Custom">
       <normal><![CDATA[fonts/arial.ttf]]></normal>
       <bold><![CDATA[fonts/arialbd.ttf]]></bold>
       <italic><![CDATA[fonts/ariali.ttf]]></italic>
       <boldItalic><![CDATA[fonts/arialbi.ttf]]></boldItalic>
       <pdfEncoding><![CDATA[Identity-H]]></pdfEncoding>
       <pdfEmbedded><![CDATA[true]]></pdfEmbedded>
       <locales>
               <locale><![CDATA[en_US]]></locale>
       </locales>
   </fontFamily>    

</fontFamilies>

Каталог fonts включает все файлы ttf. Я только что добавил эту банку в путь к классам.


person nKognito    schedule 13.02.2012    source источник
comment
Можете ли вы опубликовать файл xml с определением шрифта и фрагмент файла jrxml, где этот шрифт используется?   -  person Alex K    schedule 13.02.2012
comment
Спасибо за ответ. См. обновления в вопросе   -  person nKognito    schedule 14.02.2012
comment
Алекс попросил кусок .jrxml. Вы не опубликовали это.   -  person mdahlman    schedule 14.02.2012


Ответы (1)


Вот мой рабочий образец.

Файл определения шрифта (я копаю его из jar-файла шрифта):

<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
   <fontFamily name="Arial">
       <normal><![CDATA[fonts/arial.ttf]]></normal>
       <bold><![CDATA[fonts/arialbd.ttf]]></bold>
       <italic><![CDATA[fonts/ariali.ttf]]></italic>
       <boldItalic><![CDATA[fonts/arialbi.ttf]]></boldItalic>
       <pdfEncoding><![CDATA[Identity-H]]></pdfEncoding>
       <pdfEmbedded><![CDATA[false]]></pdfEmbedded>
   </fontFamily>
</fontFamilies>

Файл jar находится в пути к классам приложения.

И вот мой java-код:

String defaultPDFFont = "Arial";

JRProperties.setProperty("net.sf.jasperreports.awt.ignore.missing.font", "true");
JRProperties.setProperty("net.sf.jasperreports.default.font.name", defaultPDFFont);

JasperReport jasperReport = JasperCompileManager.compileReport(reportSource);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params);

JasperExportManager.exportReportToPdfFile(jasperPrint, outputFileName);

Я установил свойство net.sf.jasperreports.awt.ignore.missing.font, чтобы предотвратить ошибку (JRFontNotFoundException: Font 'Arial Custom' is not available to the JVM exception) в случае отсутствия шрифта. И я установил свойство net.sf.jasperreports.default.font.name для определения шрифта, который будет использоваться в результирующем файле PDF.

Вы можете прочитать информацию об этих свойствах: net .sf.jasperreports.awt.ignore.missing.font и net.sf.jasperreports.default.font.name.

В полученном PDF-файле используется этот шрифт (в данном примере Arial).

person Alex K    schedule 14.02.2012
comment
Спасибо! Я нашел, где была моя проблема - я установил шрифт как встроенный. - person nKognito; 14.02.2012
comment
JRPProperties.setProperty устаревшая потребность: DefaultJasperReportsContext context = DefaultJasperReportsContext.getInstance(); JRPPropertiesUtil.getInstance(контекст).setProperty(net.sf.jasperreports.awt.ignore.missing.font,true); - person Kaiser; 31.01.2014