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

如果缺少PDF的字体,为什么碧玉报告不抛出JRFontNotFoundException?

丁德义
2023-03-14
问题内容

并且我希望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安装属性中的font的情况下才会抛出该错误:

fontName在任何运行时可用的JasperReports字体扩展中,或者在Java虚拟机可用的字体名称中都找不到用作报告模板中属性值的字体名称时,会引发异常。

如果pdfFontName未安装in属性的字体(而不使用其他已安装的字体),是否有任何方法可以中止PDF的生成?


问题答案:

您的设定pdfFontName不是fontName

pdfFontName这是一种旧方法,现已 过时
以指示itext库应使用哪种字体,JRFontNotFoundException如果缺少该字体,jasper-
reports不会抛出该异常,而是itext将抛出一个异常,该异常被捕获并重新启动为a JRRuntimeException

在ext中,Helvetica作为afm文件包含在内,因此,如果使用ext,它将不会引发任何异常,但是,如果您以jasper-
a表示另一种字体(在本例中未表示=默认字体),则这 不能保证 您的文本 正确呈现
。报告。事实上,这是一个烂摊子,都pdfFontNamepfdEncoding被弃用。

如果未安装属性pdfFontName中的字体,是否有任何方法可以中止PDF的生成?

不要使用pdfFontName,但是如果您坚持(出于问题的考虑),然后还要设置fontName="Helvetica",那么设置jasper-
reports字体将引发一个JRFontNotFoundExceptionif(如果找不到)。

正确的方法 是只设置 fontName ,然后提供
字体的扩展
,在字体扩展你包括实际ttf,指示编码和是否应该被嵌入。

顺便说一句:我会使用Identity-H编码,这是推荐用于较新的PDF标准,它使您能够混合使用不同的编码。



 类似资料:
  • 我看书 https://stackoverflow.com/a/4028080/5277820 https://stackoverflow.com/a/35549391/5277820 http://community.jaspersoft.com/questions/543275/fonts-problem-while-using-jasper-reports-402-version http:

  • 使用 iReport 3.7.5,我预览了 Jasper Report,我想将其另存为 PDF 文件。PDF 文件已创建,但 PDF 文件上缺少粗体和斜体格式。 请告诉我如何保存正确的PDF文件。

  • 问题内容: 我在寻找解决此问题的方法时遇到问题。运行它后,我的代码可以正常工作。它假定将我的sql数据库中的数据显示到jtable上,并且有一个按钮将触发显示jasper报告,但存在一点问题,它始终向我显示消息“文档无页面”。这是为什么?有人可以帮我解决我的问题吗?我做错什么了? 这是我的代码: 这是XML报告: 问题答案: 首先,资源管理… 如果可以,您应该只打开与数据库的单个连接。确保在关闭应

  • 问题内容: 我想在碧玉报告中显示图像。我在.jrxml上具有以下内容: 图像logo.jpg与.jrxml位于同一目录中。只是说这对我不起作用。我在Google上搜索了一下,发现jasper报告将我放在.jrxml中的内容视为到JVM目录的相对路径,并且要更改此设置,我需要将返回文件的FileResolver作为“ REPORT_FILE_RESOLVER”参数传递。因此,我在.java中进行了以

  • 如何从jar文件中加载已编译的jasper报告,而不是通过硬盘驱动器上的特定路径? 我的报告在我的机器上运行良好,因为我已经设置了报告的路径: 但是当在另一台计算机上从完成的jar中工作时,报告没有被加载。所以我尝试使用输入流并将其传递给JasperFillManager,但是没有任何效果——输入流没有找到文件。我走错路了吗? 我最初的工作代码: 现在,更改后的代码不起作用: 任何帮助非常感谢!

  • 我的数据库中有1000000.00,但由于逗号的缘故,我不知道如何合计这些数字。。有人能帮我吗?im使用jasper reports和netbeans