2012-09-16 49 views
3

我正在使用iReport Designer 4.7创建.jrxml。它非常类似于.jrxml,它显示来自JAVA的传递 的参数。测试pdf是从iReport Designer生成的,我可以使用Adobe Reader进行查看。JAVA生成的PDF使用Jasper Reports损坏

现在,这里是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的读者说:

ADOBE READER无法打开“检验.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> 
+0

可以共享PDF,使我们可以看看吗? –

+0

@BrunoLowagie:我想哟,但是,SO不允许附加任何其他图片。 –

+0

有什么异常吗?是否具有生成的文件内容,还是具有0字节的大小? – Ralph

回答

1

Hardik,

我看到在这里2-3事情

1)generateReport你的名字OUTFILE总是为 “C:\ PDF文件” +空值。 (我想知道为什么仍然会创建test.pdf)

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

编辑

3)就问,为什么保持两个不同的功能,用于生成报告? 在我看来,你可以用单功能createReport实现目标。

编辑:2

我觉得这个环节可能会提供一些帮助:http://jasperforge.org/uploads/publish/jasperreportswebsite/trunk/faq.html?group_id=252#FAQ29

+0

我编辑了这个问题。我粘贴了代码摘录。所以,现在我已经删除了古吉拉特语对象部分。我们能聊天吗 ? –

+0

是啊当然我们可以..但我不知道如何开始它所以,从未做过之前:( –

+0

http://chat.stackoverflow.com/rooms/139/java –