使用Jasper Reports损坏了JAVA生成的PDF

时间:2012-09-16 07:54:28

标签: java pdf jasper-reports ireport

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

现在,这是java代码

我从Servlet调用createReport(String reportName, Map params)。 参数是从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读者说:

  

Adob​​e Reader无法打开'test.pdf',因为它不是一个   支持的文件类型或因为文件已损坏(例如,   它是作为电子邮件附件发送的,未被正确解码)。

enter image description here

编辑:我没有任何异常,生成的文件大小约为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>

1 个答案:

答案 0 :(得分:1)

Hardik,

我在这里看到2-3件事

1)generateReport中的outfile名称始终为“c:\ pdfs”+ NULL。 (我想知道为什么还会创建test.pdf)

2)gujarati对象包含报告的参数是什么?

修改

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

编辑:2

我认为此链接可能会提供一些帮助:http://jasperforge.org/uploads/publish/jasperreportswebsite/trunk/faq.html?group_id=252#FAQ29