Jasper报表生成错误

3
我在Jaspersoft Studio 5.1.0上设计了一个JRXML,可以在Eclipse和Windows机器上生成CSV格式的报表。但是当我将Java代码导出到Unix服务器时,出现以下错误。
Unix服务器的Java版本为:"1.7.0.08"。
Caused by: 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:179)
        at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:148)
        at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:464)
        at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:861)
        at com.infy.ui.mig.compare.MigrationUXAndONSCompare.GenerateReport(MigrationUXAndONSCompare.java:518)
        ... 2 more
Caused by: net.sf.jasperreports.engine.JRRuntimeException: java.io.IOException: Problem reading font data.
        at net.sf.jasperreports.engine.fonts.SimpleFontFace.setTtf(SimpleFontFace.java:182)
        at net.sf.jasperreports.engine.fonts.SimpleFontExtensionHelper.parseFontFace(SimpleFontExtensionHelper.java:364)
        at net.sf.jasperreports.engine.fonts.SimpleFontExtensionHelper.parseFontFamily(SimpleFontExtensionHelper.java:290)
        at net.sf.jasperreports.engine.fonts.SimpleFontExtensionHelper.parseFontFamilies(SimpleFontExtensionHelper.java:254)
        at net.sf.jasperreports.engine.fonts.SimpleFontExtensionHelper.loadFontFamilies(SimpleFontExtensionHelper.java:215)
        at net.sf.jasperreports.engine.fonts.SimpleFontExtensionHelper.loadFontFamilies(SimpleFontExtensionHelper.java:184)
        at net.sf.jasperreports.engine.fonts.FontExtensionsRegistry.getExtensions(FontExtensionsRegistry.java:56)
        at net.sf.jasperreports.extensions.DefaultExtensionsRegistry.getExtensions(DefaultExtensionsRegistry.java:110)
        at net.sf.jasperreports.engine.util.JRStyledTextParser.<clinit>(JRStyledTextParser.java:83)
        ... 11 more
Caused by: java.io.IOException: Problem reading font data.
        at java.awt.Font.createFont0(Font.java:999)
        at java.awt.Font.createFont(Font.java:876)
        at net.sf.jasperreports.engine.fonts.SimpleFontFace.setTtf(SimpleFontFace.java:174)
        ... 19 more

Java 代码:

JasperPrint jasperPrint;
            JasperReport jasperReport;
            HashMap jasperParams = new HashMap();

            InputStream input = new FileInputStream(jrxmlFile);
            JasperDesign design = JRXmlLoader.load(input);
            jasperReport = JasperCompileManager.compileReport(design);
            jasperReport.isIgnorePagination();
            Document document = JRXmlUtils.parse(JRLoader.getLocationInputStream(writeFileDir));

            jasperParams.put(jasperReport.isIgnorePagination(), Boolean.TRUE);
            jasperParams.put(JRXPathQueryExecuterFactory.PARAMETER_XML_DATA_DOCUMENT, document);
            jasperPrint = JasperFillManager.fillReport(jasperReport, jasperParams);

            JRCsvExporter exporter = new JRCsvExporter();
            exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
            exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, csvReportName);
            exporter.exportReport();

JRXML文件:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version last-->
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="HCOTA_RTACOF" language="groovy" pageWidth="3500" pageHeight="4000" columnWidth="3460" columnSpacing="37" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" isIgnorePagination="true" uuid="b857e321-5d0f-4309-a5f5-950316db1f9d">
    <property name="com.jaspersoft.studio.unit." value="pixel"/>
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="XmlDataSource_HRDM_ARD"/>
    <subDataset name="Dataset1" uuid="62525010-7a4a-47a7-b029-c7502b171ae9">
        <queryString>
            <![CDATA[]]>
        </queryString>
        <field name="field_name" class="java.lang.String">
            <fieldDescription><![CDATA[@name]]></fieldDescription>
        </field>
        <field name="group-name-ons" class="java.lang.String">
            <fieldDescription><![CDATA[field-type[@type = "ons"]/group-name]]></fieldDescription>
        </field>
        <field name="page-name-ons" class="java.lang.String">
            <fieldDescription><![CDATA[field-type[@type = "ons"]/page-name]]></fieldDescription>
        </field>
    </subDataset>
    <queryString language="XPath">
        <![CDATA[/menu-compare/field-details/fields]]>
    </queryString>
    <field name="field_exists" class="java.lang.String">
        <fieldDescription><![CDATA[@existence]]></fieldDescription>
    </field>
    <background>
        <band splitType="Stretch"/>
    </background>
    <title>
        <band height="79" splitType="Stretch"/>
    </title>
    <pageHeader>
        <band height="82" splitType="Stretch"/>
    </pageHeader>
    <columnHeader>
        <band height="120" splitType="Immediate">
            <printWhenExpression><![CDATA[$V{PAGE_NUMBER}==1]]></printWhenExpression>
            <textField>
                <reportElement uuid="78cd7b95-378a-47a7-a2e6-635677759067" x="10" y="60" width="70" height="30" backcolor="#FFFFFF"/>
                <textElement>
                    <font isBold="true"/>
                </textElement>
                <textFieldExpression><![CDATA["Map Type"]]></textFieldExpression>
            </textField>
            <textField isStretchWithOverflow="true">
                <reportElement uuid="a11ecb4a-06f1-400f-953f-e39edbcf3d9f" isPrintRepeatedValues="false" x="80" y="60" width="70" height="30"/>
                <textElement>
                    <font isBold="true"/>
                </textElement>
                <textFieldExpression><![CDATA["Back End Field"]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement uuid="40a166e8-1aa0-45e8-a10c-ecf61f6b2f5a" x="150" y="60" width="70" height="30"/>
                <textElement>
                    <font isBold="true" pdfFontName="Helvetica-Bold"/>
                </textElement>
                <textFieldExpression><![CDATA["Group Name"]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement uuid="c19e0438-7cf9-499e-80d4-7e2f8caaa54b" x="220" y="60" width="70" height="30"/>
                <textElement>
                    <font isBold="true"/>
                </textElement>
                <textFieldExpression><![CDATA["Page Name"]]></textFieldExpression>
            </textField>
        </band>
    </columnHeader>
    <detail>
        <band height="125" splitType="Stretch">
            <componentElement>
                <reportElement uuid="f80aa2dd-1bdd-41fe-82f2-59b4e56d4b28" x="10" y="40" width="1760" height="60"/>
                <jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" printOrder="Horizontal">
                    <datasetRun subDataset="Dataset1" uuid="c1fe8920-0512-41bc-9f79-8fcbc61ac067">
                        <dataSourceExpression><![CDATA[$P{REPORT_DATA_SOURCE}.subDataSource("/fields/field")]]></dataSourceExpression>
                    </datasetRun>
                    <jr:listContents height="125" width="1760">
                        <textField isStretchWithOverflow="true" isBlankWhenNull="true">
                            <reportElement uuid="8d3ab036-d155-4f07-9345-dd37dd3f7101" x="70" y="15" width="70" height="30"/>
                            <textElement/>
                            <textFieldExpression><![CDATA[$F{field_name}]]></textFieldExpression>
                        </textField>
                        <textField isStretchWithOverflow="true" isBlankWhenNull="true">
                            <reportElement uuid="575757aa-2b24-446e-aa79-ea0c5eb02049" x="140" y="15" width="70" height="30"/>
                            <textElement/>
                            <textFieldExpression><![CDATA[$F{group-name-ons}]]></textFieldExpression>
                        </textField>
                        <textField isStretchWithOverflow="true" isBlankWhenNull="true">
                            <reportElement uuid="09512867-0754-4544-991f-8dd4ffc7d8c6" x="210" y="15" width="70" height="30"/>
                            <textElement/>
                            <textFieldExpression><![CDATA[$F{page-name-ons}]]></textFieldExpression>
                        </textField>
                    </jr:listContents>
                </jr:list>
            </componentElement>
            <textField isStretchWithOverflow="true" isBlankWhenNull="true">
                <reportElement uuid="fd3813e4-e26d-48ec-8519-c2c25780f48c" x="10" y="55" width="70" height="30"/>
                <textElement>
                    <font isBold="true"/>
                </textElement>
                <textFieldExpression><![CDATA[$F{field_exists}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
    <columnFooter>
        <band height="45" splitType="Stretch"/>
    </columnFooter>
    <pageFooter>
        <band height="54" splitType="Stretch"/>
    </pageFooter>
    <summary>
        <band height="42" splitType="Stretch"/>
    </summary>
</jasperReport>

可能缺少一些X-libs。我也遇到了同样的问题:两个Linux盒子,一个没有问题,另一个出现了你的异常。你的Linux盒子上安装了X11吗? - Dirk Lachowski
3个回答

1
我认为pdfFontName="Helvetica-Bold"是导致问题的原因。这里有两件事情需要考虑。
  1. 当您导出报告并希望Helvetica-Bold在其中显示时,您需要为其创建字体扩展,除非您的JVM已经具有Helvetica-Bold。
  2. 如果使用字体扩展,则必须在jrxml文件中创建自定义样式并在其中使用字体,并将样式应用于元素。
希望这可以帮助您。

0

我一直在尝试解决一个类似的问题,昨天终于找到了一个可以解决我的问题的答案(请参见下面的链接)。这个问题只出现在我们的QA环境中,而不是在我的本地桌面机上。

简而言之,错误信息非常误导人,实际问题是java.awt.Front无法写入Java-temp-directory(java.io.tmpdir),如下面的原始答案所述。我所要做的就是手动创建一个Tomcat临时目录(在QA环境中以前从未创建过)。之后,它就开始正常工作了。

我找到的原始答案


0

刚刚看到你的异常堆栈跟踪...它说

Caused by: java.io.IOException: Problem reading font data.

可能在您的JRXML模板中,您可能使用了一些在您的应用程序中不可用的字体


你想在哪里部署JRXML文件?你使用某个应用服务器吗? - pathfinder
你在JRXML模板中使用了一些自定义字体吗? - pathfinder
我想从XML文件生成CSV报告。使用JRXML文件来生成它。我没有使用任何应用服务器。 - user3868730
没有使用任何的,已经在问题部分共享了JRXML模板。 - user3868730

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接