JAVA生成的PDF使用Jasper报告损坏

JAVA生成的PDF使用Jasper报告损坏,java,pdf,jasper-reports,ireport,Java,Pdf,Jasper Reports,Ireport,我正在使用iReportDesigner4.7创建.jrxml。这是一个非常简单的.jrxml,它显示已传递的参数 来自JAVA。测试pdf由iReport Designer生成,我可以使用Adobe Reader查看它 现在,这里是java代码 我正在从Servlet调用createReport(stringreportname,Map参数)。 参数是从Servlet设置的。将始终传递参数 public void generateReport(String fileName, String o

我正在使用iReportDesigner4.7创建
.jrxml
。这是一个非常简单的
.jrxml
,它显示已传递的参数 来自JAVA。测试pdf由iReport Designer生成,我可以使用Adobe Reader查看它

现在,这里是java代码

我正在从Servlet调用
createReport(stringreportname,Map参数)
。 参数是从Servlet设置的。将始终传递参数

public void generateReport(String fileName, String outFileName, Map paramerterMap,
            String reportFormat) throws JRException{

    String reportSource = "C:\\jrxml\\" + fileName;
    String outFile = null;
    downloadPath = "C:\\pdfs\\";

    outFile = downloadPath + outFileName;
            JRExporter exporter = new JRPdfExporter();
            JasperPrint jasperPrint = JasperFillManager.fillReport(reportSource, paramerterMap);
        exporter.setParameter(JRXlsExporterParameter.CHARACTER_ENCODING,"UTF-8");
                    exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, outFile);
        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);

                    exporter.exportReport();
}

public Boolean createReport(String reportName, Map params) {
    try {
        String jrFile = reportName + ".jasper";
        String outFileName = String.valueOf(7884);
        outFileName += "_" + reportName + ".pdf";
        generateReport(jrFile, outFileName, params, ".pdf");
        return true;
    }  catch (JRException e) {
        e.printStackTrace();
        log.error("ReportManager--generateReport--JRException: " + e);
                    return false;
    } catch (Exception e) {
        e.printStackTrace();
        log.error("ReportManager--generateReport--Exception: " + e);
        return false;
    }
}
我使用的是iReport Designer使用的同一套
.jar
。 (事实上,我已经从iReport安装目录复制了
.jar
文件)

问题:使用JAVA代码生成的pdf已损坏。 当我尝试在创建的位置打开PDF时,Adobe reader会说:

Adobe Reader无法打开“test.pdf”,因为它不是 支持的文件类型,或者因为文件已损坏(例如, 它作为电子邮件附件发送,未正确解码)

编辑:我没有得到任何异常,生成的文件大小约为5 KB

EDIT2:添加JRXML

<?xml version="1.0" encoding="UTF-8"?>
<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="Certificate" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="7367a6fb-f8da-4ba3-b90d-319807f92789">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <property name="ireport.scriptlethandling" value="0"/>
    <property name="ireport.encoding" value="UTF-8"/>
    <import value="net.sf.jasperreports.engine.*"/>
    <import value="java.util.*"/>
    <import value="net.sf.jasperreports.engine.data.*"/>
    <parameter name="name" class="java.lang.String"/>
    <background>
        <band splitType="Stretch"/>
    </background>
    <title>
        <band height="27" splitType="Stretch">
            <textField pattern="MMMMM dd, yyyy" isBlankWhenNull="false">
                <reportElement uuid="b72c0bad-3935-40ba-8d6d-3993cb5122d2" key="textField" x="413" y="0" width="140" height="20"/>
                <box>
                    <topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
                    <leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
                    <bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
                    <rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
                </box>
                <textElement>
                    <font size="12"/>
                </textElement>
                <textFieldExpression><![CDATA[new java.util.Date()]]></textFieldExpression>
            </textField>
        </band>
    </title>
    <pageHeader>
        <band height="21" splitType="Stretch"/>
    </pageHeader>
    <columnHeader>
        <band height="22" splitType="Stretch"/>
    </columnHeader>
    <detail>
        <band height="141" splitType="Stretch">
            <textField isStretchWithOverflow="true" isBlankWhenNull="true">
                <reportElement uuid="cbaae0d4-53da-420e-8efa-7f4fcc6900f0" key="name" x="0" y="10" width="530" height="20"/>
                <box>
                    <topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
                    <leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
                    <bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
                    <rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
                </box>
                <textElement textAlignment="Left" verticalAlignment="Middle">
                    <font fontName="Arial" size="11" isBold="true"/>
                </textElement>
                <textFieldExpression><![CDATA[$P{name}]]></textFieldExpression>
            </textField>

        </band>
    </detail>
    <columnFooter>
        <band splitType="Stretch"/>
    </columnFooter>
    <pageFooter>
        <band height="20" splitType="Stretch"/>
    </pageFooter>
    <summary>
        <band splitType="Stretch"/>
    </summary>
</jasperReport>

Hardik

我看到这里有两三样东西

1) generateReport中的输出文件名始终为“c:\pdfs”+NULL。 (我想知道为什么test.pdf仍然被创建)

2) 古吉拉特邦
对象包含哪些报告参数

编辑

3) 只是问为什么要保留两个单独的函数来生成报告? 在我看来,您可以通过单一功能
createReport
实现目标

编辑:2


我想这个链接可能会提供一些帮助:

你能分享PDF文件让我们看一下吗?@BrunoLowagie:我想要你,但是,所以不允许附加任何其他图像。有什么例外吗?生成的文件有内容,还是大小为0字节?@Ralph:没有,没有例外,文件有内容,大小为5KB。请发布您的JRXML。我已经编辑了这个问题。我粘贴了代码摘录。所以,现在我删除了古吉拉特邦的对象部分。我们能聊聊吗?当然可以。。但我不知道如何开始,所以,以前从未做过:(