【问题标题】:PDF generated from JAVA is damaged using Jasper Reports使用 Jasper Reports 损坏从 JAVA 生成的 PDF
【发布时间】:2012-09-08 20:15:31
【问题描述】:

我正在使用iReport Designer 4.7 创建.jrxml。它是一个非常简单的.jrxml,它显示传递的参数 来自 JAVA。测试 pdf 是从 iReport Designer 生成的,我可以使用 Adob​​e 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 阅读器说:

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>

【问题讨论】:

  • 你能把PDF分享给我们看看吗?
  • @BrunoLowagie:我想要你,但是,不允许附加任何其他图像。
  • 有异常吗?有生成的文件内容,还是有0 Byte的大小?
  • @Ralph:不,没有例外,文件有内容,大小为5KB
  • 能否请您发布您的 JRXML。

标签: java pdf jasper-reports ireport


【解决方案1】:

哈迪克,

我在这里看到了 2-3 件事

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

2) gujarati 对象包含哪些报表参数??

编辑

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

编辑:2

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

【讨论】:

  • 我已经编辑了这个问题。我已经粘贴了代码摘录。所以,现在我已经删除了古吉拉特语对象部分。我们可以聊天吗?
  • 是的,我们可以.. 但我不知道如何在 SO 上启动它,以前从未做过 :(
猜你喜欢
  • 1970-01-01
  • 2015-07-29
  • 2015-04-13
  • 1970-01-01
  • 2022-10-05
  • 1970-01-01
  • 1970-01-01
  • 2011-09-16
  • 2016-01-25
相关资源
最近更新 更多