- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我读过
我预计 Jasper Reports 会抛出 JRFontNotFoundException
如果机器上未安装字体。
但是我的应用程序不会抛出 JRFontNotFoundException
,尽管我还没有在任何(Jaspersoft Studios、JasperReports、Adobe Acrobat Reader)机器上安装使用的字体“Helvetica”。
JRXML:
<parameter name="timestamp" class="java.util.Date"/>
[...]
<textField>
<reportElement x="0" y="0" width="50" height="16" uuid="0007846a-26f1-457a-a198-67a2f7c8417c">
<property name="local_mesure_unitwidth" value="pixel"/>
<property name="com.jaspersoft.studio.unit.width" value="px"/>
<property name="local_mesure_unitx" value="pixel"/>
<property name="com.jaspersoft.studio.unit.x" value="px"/>
<property name="local_mesure_unity" value="pixel"/>
<property name="com.jaspersoft.studio.unit.y" value="px"/>
<property name="local_mesure_unitheight" value="pixel"/>
<property name="com.jaspersoft.studio.unit.height" value="px"/>
</reportElement>
<box padding="2"/>
<textElement textAlignment="Left" verticalAlignment="Top">
<font size="8" pdfFontName="Helvetica" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
</textElement>
<textFieldExpression><![CDATA[DATEFORMAT($P{timestamp},"dd.MM HH:mm")]]></textFieldExpression>
</textField>
Maven 依赖项:
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>5.6.0</version>
</dependency>
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports-functions</artifactId>
<version>5.6.0</version>
</dependency>
Java:
private byte[] createPdf() {
try {
InputStream is = getClass().getResourceAsStream("MyReport.jasper");
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(is);
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("timestamp", new Date());
JRDataSource jrDataSource = new JRBeanCollectionDataSource(new Vector(), false);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, jrDataSource);
byte[] pdf = JasperExportManager.exportReportToPdf(jasperPrint);
return pdf;
} catch (JRException e) {
throw new RuntimeException("Could not create PDF.", e);
}
}
原因是JRFontNotFoundException
仅当属性 fontName
中的字体未安装时才会抛出:
Exception raised when a font name used as value for the
fontName
attribute in the report template, is not found in any of the runtime available JasperReports font extensions, nor among the font names available to the Java Virtual Machine.
如果属性 pdfFontName
中的字体未安装(而不是使用任何其他已安装的字体),是否有任何方法可以中止 PDF 的生成?
最佳答案
您正在设置pdfFontName
而不是fontName
pdfFontName
是一种旧方法,现在已弃用来指示 itext 库应使用什么字体,jasper-reports 不会抛出 JRFontNotFoundException
如果字体丢失,itext 会抛出一个异常,该异常被捕获并作为 JRRuntimeException
重新启动。
在itext中,Helvetica作为afm
文件包含在内,因此如果使用它,itext不会抛出任何异常,但这不能保证您的文本是如果您在 jasper-reports 中指示另一种字体(在您的情况下未指示=默认字体),则正确呈现。事实上,这是一团糟,pdfFontName
和 pfdEncoding
都已被弃用。
如果属性 pdfFontName 中的字体未安装,是否有任何方法可以中止 PDF 的生成?
不要使用pdfFontName
,但如果您坚持(为了问题的目的),那么还要设置fontName="Helvetica"
,如果未找到,设置 jasper-reports 字体将引发 JRFontNotFoundException
。
正确的方法是仅设置fontName
,然后提供 font-extensions ,在字体扩展中包含实际的 ttf
,指示编码以及是否应嵌入。
顺便说一句:我会使用 Identity-H 编码,这对于较新的 PDF 标准是推荐的,并且使您能够混合不同的编码。
关于java - 如果缺少 PDF 字体,为什么 jasper 报告不会抛出 JRFontNotFoundException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57323549/
我读过 https://stackoverflow.com/a/4028080/5277820 https://stackoverflow.com/a/35549391/5277820 http://
我读了 https://stackoverflow.com/a/4028080/5277820 https://stackoverflow.com/a/35549391/5277820 http://
我有一个使用 JasperReport 制作的报告的应用程序,但是当我尝试生成报告时抛出一个 net.sf.jasperreports.engine.util.JRFontNotFoundExcept
我是一名优秀的程序员,十分优秀!