当前位置: 首页 > 面试题库 >

iReport外部字体

孔君浩
2023-03-14
问题内容

我正在尝试在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。


问题答案:

这是我的工作样本。

字体定义文件(我从字体的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在此示例中)。



 类似资料:
  • 我想使用Garamond字体为我的PDF报告,我在Mac中使用iReport。 我已经从 加拉蒙-正则

  • iReport是用于定义JasperReport报表的可视化工具,JasperReport使用XML来定义一个报表的结构,iReport可以让用户很方便地定义报表,而不需要手工去写这些XML文件。 iReport是为JasperReports设计的强大的,直观的,易于使用的可视化报表设计器采用纯Java开发。这个工具允许用户可视化编辑包含charts,图片,子报表等的复杂报表。iReport 还集

  • 这是我正在研究的一个更大问题的一个简短的子问题。 为什么我不能通过第8行outer class中的inner class的实例访问outer类字段? 字段在内部类中可见。 外部类中的非静态方法仍然存在此问题。 字段的可见性并不重要。无论从哪种方式,它都可以从内部类中看到。 可以通过内部类中的(私有)getter访问该字段,但我出现问题的原因之一是,我希望避免这些。 它应该成为不可变的构建器模式的一

  • 我有应用程序,以自定义字体样式生成报告,如字体家族,颜色,大小和样式(粗体,斜体,下划线)。我使用Windows系统中的所有字体族。

  • 问题内容: 是否可以通过内联CSS加载外部字体? 注意:我 不是 在谈论使用带有定义的外部CSS文件,而是类似以下内容: 问题答案: 是否可以使用内嵌CSS加载外部字体?不适用于外部CSS文件[....]。 是的,您可以按照Stephen Scaff的本文中的文章所示对base64字体进行编码,然后将其放到页面的块中,以避免外部请求。 也可以按照您所描述的浏览器是否支持的方式使用此技术。 每个现代

  • 我使用的是Laravel,我试图使用HasOne::create方法从数组中创建一个相关记录。它插入相关记录,但不向主模型的外部字段添加新id。我做错了什么? 谢谢 关系工作正常,指定所有字段。由- var_dump结果-null 此外,$data['地址']包含有效数据,在地址模型中指定为可填充数据,address_id在联系人模型中可填充数据 UPD: 联系类: 地址类: $data['地址'