我正在尝试在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
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>
fonts目录包含所有ttf文件。我刚把那个jar添加到了classpath。
答案 0 :(得分: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>
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
)。