Java – PDF generated from JAVA is damaged using Jasper Reports

ireportjasper-reportsjavapdf

I am using iReport Designer 4.7 to create .jrxml. Its a very simle .jrxml which displays parameters passsed
from JAVA. The test pdf gets generated from iReport Designer and I can view it using Adobe Reader.

Now, Here is the java code

I am calling createReport(String reportName, Map params) from Servlet.
The parameters are set from Servlet. There will be always parameters passed.

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;
    }
}

I am using same set of .jar which iReport Designer used.
(In fact I have copied .jar files from iReport installation directory)

Problem: The pdf generated using JAVA code is broken.
When I try to open PDF at created location, The Adobe reader says :

Adobe Reader could not open 'test.pdf' because it is either not a
supported file type or because the file has been damaged (for example,
it was sent as an email attachment and wasn't correctly decoded).

enter image description here

EDIT: I do not get any exception and the generated file size is around 5 KB.

EDIT2: Adding 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>

Best Answer

Hardik,

I see 2-3 things over here

1) Your outfile name in generateReport always comes as "c:\pdfs"+ NULL. ( I wonder why test.pdf is still created )

2) What does gujarati object contains parameters for reports??

EDIT

3) Just asking why keep two seperate function for report generation? In my opinion you could achieve the objective with single function createReport.!

EDIT : 2

I think this link might offer some help : http://jasperforge.org/uploads/publish/jasperreportswebsite/trunk/faq.html?group_id=252#FAQ29