【问题标题】:Font extension doesn't work for OTF font - JasperReports 4.7.1字体扩展不适用于 OTF 字体 - JasperReports 4.7.1
【发布时间】:2023-04-10 10:34:01
【问题描述】:

我按照我在互联网上可以找到的所有示例将 OTF 字体嵌入到生成的 PDF 中,但它不起作用。我使用 iReport 创建了一个字体扩展名 .jar(我还手动创建了一个用于字体的 maven jar),但它不适用于 OTF 字体。我还确保 jasper-fonts-extension.jar 在类路径中。我知道,因为当我用其他一些 TTF 字体替换这个字体时,它就可以工作了。

我正在跑步-

Jasper Reports & iReport Version : 4.7.1
Oracle Java SDK 7
Ubuntu 12.04

我尝试在 PDF 中嵌入的字体 - Myraid Pro (OTF)

我的 fonts.xml 看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
   <fontFamily name="Myriad Pro">
   <normal><![CDATA[fonts/MyriadPro-Regular.otf]]></normal>
   <bold><![CDATA[fonts/MYRIADPRO-BOLD.OTF]]></bold>
   <italic><![CDATA[fonts/MYRIADPRO-CONDIT.OTF]]></italic>
   <boldItalic><![CDATA[fonts/MYRIADPRO-BOLDIT.OTF]]></boldItalic>
   <pdfEmbedded><![CDATA[true]]></pdfEmbedded>
   </fontFamily>
   <fontFamily name="Myriad Pro Lite">
      <normal><![CDATA[fonts/MYRIADPRO-COND.OTF]]></normal>
      <pdfEmbedded><![CDATA[true]]></pdfEmbedded>
   </fontFamily>
</fontFamilies>

这适用于其他 TTF 字体,但是当我切换到 MyraidPro 字体时,我收到以下错误

Exception in thread "main" java.lang.ExceptionInInitializerError
at net.sf.jasperreports.engine.fill.JRBaseFiller.<init>(JRBaseFiller.java:121)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:88)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:103)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:61)
at net.sf.jasperreports.engine.fill.JRFiller.createFiller(JRFiller.java:153)
at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:122)
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:464)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:861)
at com.qedrix.formbuilder.pojo.JsonForm.main(JsonForm.java:141)

原因:net.sf.jasperreports.engine.util.JRFontNotFoundException:字体 'fonts/MyriadPro-Regular.otf' 对 JVM 不可用。

我还按照以下链接中给出的步骤进行操作:here

如果这与 OTF 字体有关,我想知道为什么在 Java 中导出 PDF 时它不起作用在 iReport 的 预览模式中?

【问题讨论】:

标签: jasper-reports ireport opentype


【解决方案1】:

我认为这是 JasperReports 中的一个小错误。 “fonts.xml”中的条目

&lt;normal&gt;&lt;ttf&gt;fonts/OfficinaSansStd-Book.otf&lt;/ttf&gt;&lt;/normal&gt;

抛出异常。如果您重命名字体文件并将条目更改为

&lt;normal&gt;&lt;ttf&gt;fonts/OfficinaSansStd-Book.ttf&lt;/ttf&gt;&lt;/normal&gt;

对我来说很好用。

【讨论】:

  • 感谢@Thilo 将 OTF 重命名为 TTF 在 java 和 ireport 5.2.0 中工作
【解决方案2】:

我相信您需要遵循以下答案才能使这些字体在 PDF 输出中工作。 Use custom fonts when creating pdf using iReport

此外,您可能还想了解应用程序使用什么文件调用来查找字体。我推荐在 linux 上使用 strace。

【讨论】:

  • 谢谢。我已经关注了该链接(我在最后的帖子中提到了这一点)。这没有帮助。我听说 Java 在使用 Adob​​e 1 编码处理 otf 字体时遇到问题;但我无法确认。你最后的声明 - 你能解释一下吗?
  • 对,在大多数操作系统上,您可以记录文件活动以找出应用程序正在执行的文件调用。 Java 很可能正在遍历一组已知的路径来查找该字体名/文件名。 strace 是这样一个命令,它在 linux 上将记录应用程序正在做什么。见:stackoverflow.com/questions/10384850/…
猜你喜欢
  • 2015-04-01
  • 1970-01-01
  • 2013-02-02
  • 1970-01-01
  • 2015-08-10
  • 1970-01-01
  • 1970-01-01
  • 2012-05-21
  • 1970-01-01
相关资源
最近更新 更多