jasperreports引擎从哪里引用字体?

苏哈西尼

我有一个应用程序,我在其中使用jasper报告库从在线生成报告。我使用Helvetica以外的其他字体生成pdf报告都是一个问题。我无法检测到从哪里引用/加载了字体。我没有针对Helvetica或Times-Roman的任何显式类。

以下是引发的错误:

net.sf.jasperreports.engine.JRRuntimeException: Could not load the following font : 
pdfFontName   : Times-Roman
pdfEncoding   : Identity-H
isPdfEmbedded : false
at net.sf.jasperreports.engine.export.JRPdfExporter.getFont(JRPdfExporter.java:2036) ~[jasperreports-5.5.0.jar:5.5.0]
at net.sf.jasperreports.engine.export.JRPdfExporter.getChunk(JRPdfExporter.java:1818) ~[jasperreports-5.5.0.jar:5.5.0]
at net.sf.jasperreports.engine.export.JRPdfExporter.getPhrase(JRPdfExporter.java:1787) ~[jasperreports-5.5.0.jar:5.5.0]
at net.sf.jasperreports.engine.export.SimplePdfTextRenderer.getPhrase(SimplePdfTextRenderer.java:89) ~[jasperreports-5.5.0.jar:5.5.0]
at net.sf.jasperreports.engine.export.SimplePdfTextRenderer.render(SimplePdfTextRenderer.java:99) ~[jasperreports-5.5.0.jar:5.5.0]
at net.sf.jasperreports.engine.export.JRPdfExporter.exportText(JRPdfExporter.java:2158) ~[jasperreports-5.5.0.jar:5.5.0]
at net.sf.jasperreports.engine.export.JRPdfExporter.exportElements(JRPdfExporter.java:861) ~[jasperreports-5.5.0.jar:5.5.0]
at net.sf.jasperreports.engine.export.JRPdfExporter.exportPage(JRPdfExporter.java:821) ~[jasperreports-5.5.0.jar:5.5.0]
at net.sf.jasperreports.engine.export.JRPdfExporter.exportReportToStream(JRPdfExporter.java:698) ~[jasperreports-5.5.0.jar:5.5.0]
at net.sf.jasperreports.engine.export.JRPdfExporter.exportReport(JRPdfExporter.java:420) ~[jasperreports-5.5.0.jar:5.5.0]

但是对于同一份报告,如果我给PDF字体命名为Helvetica,则一切运行正常。

有人可以帮我了解它是如何工作的吗?另外,如果我想添加一些新字体,我可以在哪里添加呢?

按照以下步骤在jasper fonts jar中添加新字体,如下面的链接所述

http://www.codesuggestions.com/java/jasper-reports/adding-custom-fonts-t ...

先前的错误消失了。弹出一个新错误。

Caused by: java.lang.NoClassDefFoundError: Could not initialize class net.sf.jasperreports.engine.util.JRStyledTextParser
at net.sf.jasperreports.engine.fill.JRBaseFiller.<init>(JRBaseFiller.java:121) ~[jasperreports-5.5.0.jar:5.5.0]
at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:88) ~[jasperreports-5.5.0.jar:5.5.0]
at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:103) ~[jasperreports-5.5.0.jar:5.5.0]
at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:61) ~[jasperreports-5.5.0.jar:5.5.0]
at net.sf.jasperreports.engine.fill.JRFiller.createFiller(JRFiller.java:179) ~[jasperreports-5.5.0.jar:5.5.0]
at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:81) ~[jasperreports-5.5.0.jar:5.5.0]
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:446) ~[jasperreports-5.5.0.jar:5.5.0]
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:276) ~[jasperreports-5.5.0.jar:5.5.0]
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:745) ~[jasperreports-5.5.0.jar:5.5.0]

jasperreports-5.5.0.jar存在于应用程序的类路径中,仍然面临此错误。

苏哈西尼

我的问题是我理解异常错误!因此,遵循错误的解决方案。

我遵循的链接中提到的解决方案是为FontName属性而不是PDFFontName属性添加自定义字体。

Jasper的PDFExporter引用了iText.jar中的字体。因此,更改类中的getFont()方法调用对我有所帮助。

font = FontFactory.getFont(
                pdfFont.getPdfFontName(),
                pdfFont.getPdfEncoding(),
                pdfFont.isPdfEmbedded(),
                jrFont.getFontSize() * fontSizeScale,
                pdfFontStyle,
                forecolor
                );

我更改了这一行,并为font.ttf提供了绝对路径。

font = FontFactory.getFont(
                "D\\fonts\\Arial.ttf",
                BaseFont.IDENTITY_H,
                BaseFont.EMBEDDED,
                jrFont.getFontSize() * fontSizeScale,
                pdfFontStyle,
                forecolor
                );

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章