iReport外部字体

nKo*_*ito 5 java jasper-reports ireport

我试图在PDF文档中使用外部字体.通过设置 - >字体 - >安装新字体安装后,我在iReport中使用它没有问题.

当我将新字体作为扩展名导出并将该jar文件添加到java项目的类路径时,无法生成PDF并且失败的问题

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

我做错了什么?谢谢

UPD#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
Run Code Online (Sandbox Code Playgroud)

fontsfamily1329192368547.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>
Run Code Online (Sandbox Code Playgroud)

fonts目录包含所有ttf文件.我刚把jar添加到classpath中.

Ale*_*x K 12

这是我的工作样本.

字体定义文件(我从字体的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>
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)

我设置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.fontnet.sf.jasperreports.default.font.name.

生成的pdf文件使用此字体(Arial在此示例中).

  • 需要的JRProperties.setProperty需要:DefaultJasperReportsContext context = DefaultJasperReportsContext.getInstance(); JRPropertiesUtil.getInstance(上下文).setProperty( "net.sf.jasperreports.awt.ignore.missing.font", "真"); (4认同)