JAVA生成的PDF使用Jasper报告损坏
我正在使用iReportDesigner4.7创建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
.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。我已经编辑了这个问题。我粘贴了代码摘录。所以,现在我删除了古吉拉特邦的对象部分。我们能聊聊吗?当然可以。。但我不知道如何开始,所以,以前从未做过:(