我现在公司需要做一个打印报表的项目。所以做了一个例子,现在的问题是,ireport4.0做的报表可以正常的生成PDF。但是如果用JAVA代码,读取.jasper文件。生成的PDF却只是一个空的不知道为什么。各位大侠指教哦。/////////////////JAVA Code://///////////////
public class pdfIreport { /**
 * @param args
 */
public static void main(String[] args) {
File reportFile = new File("D:\\TEST.jasper");
JasperReport jasperReport = null;
try {
jasperReport = (JasperReport) JRLoader.loadObject(reportFile.getPath());
} catch (JRException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} HashMap<String, String> parameters = new HashMap<String, String>();
parameters.put("barcode", "564789");
// Class.forName("com.mysql.jdbc.Driver");
// Connection conn =
// DriverManager.getConnection("jdbc:mysql://localhost:3306/phpcms",
// "root", "root");
try {
JasperPrint print = JasperFillManager.fillReport(jasperReport, parameters);
// OutputStream output = new FileOutputStream(new
// File("D:\\TEST.pdf"));
JasperExportManager.exportReportToPdfFile(print, "D:\\TEST.pdf");
} catch (JRException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }}//////////////TEST.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="TEST" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="102"/>
<parameter name="barcode" class="java.lang.String"/>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="79" splitType="Stretch"/>
</title>
<pageHeader>
<band height="35" splitType="Stretch"/>
</pageHeader>
<columnHeader>
<band height="61" splitType="Stretch"/>
</columnHeader>
<detail>
<band height="125" splitType="Stretch">
<componentElement>
<reportElement mode="Opaque" x="58" y="61" width="118" height="50"/>
<jr:Code39 xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" textPosition="bottom" displayChecksum="false" displayStartStop="true" extendedCharSetEnabled="false">
<jr:codeExpression><![CDATA[$P{barcode}.trim()]]></jr:codeExpression>
</jr:Code39>
</componentElement>
<componentElement>
<reportElement x="277" y="61" width="200" height="50"/>
<jr:barbecue xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" type="Code39" drawText="true" checksumRequired="false">
<jr:codeExpression><![CDATA["1234"]]></jr:codeExpression>
</jr:barbecue>
</componentElement>
</band>
</detail>
<columnFooter>
<band height="45" splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band height="54" splitType="Stretch"/>
</pageFooter>
<summary>
<band height="42" splitType="Stretch"/>
</summary>
</jasperReport>

解决方案 »

  1.   

    应该是缺少字体文件你试试导出doc。。应该没有问题
      

  2.   

    补充说明一下,我用的Jar:
    barcode4j-2.0.jar
    commons-collections.jar
    commons-digester.jar
    commons-logging.jar
    groovy-all-1.7.5.jar
    iText-2.1.7.jar
    jasperreports-4.0.0.jar
    mysql-connector-jara-5.1.13-bin.jar
      

  3.   

    你首先load了对应的jasper文件,然后又自己制造了个参数params,你最后fillReport,生成PDF文件。
    思路是正确的,方法用错了。
    JasperFillManager.fillReport(inputStream, parameters, connection),在填充报表的时候应该把当前的数据库连接传递进去,否则拿不到数据。
    说明一点:如果你的报表里面不需要什么参数的话,可以直接传个null进去