简体   繁体   English

Java Swing中的JasperReport PDF输出

[英]JasperReport PDF output in Java Swing

In my current project, I am working on some Jasper reports. 在当前的项目中,我正在处理一些Jasper报告。 I have a report which has 2 sub reports in it. 我有一个包含2个子报告的报告。 I am exporting it to pdf file. 我将其导出为pdf文件。 If I export a normal jasper report which doesn't have any subreports, the pdf file is working perfectly, when I have subreports, the pdf file is blank. 如果我导出的普通jasper报表没有任何子报表,则pdf文件运行正常,当我有子报表时,pdf文件为空白。 Following is my code: 以下是我的代码:

static String reportPath = "D:/Netbeans Projects/Abc/mail_reports/";
public static void getReport() {
    try {
        String reportName = reportPath + "AuctionSale/AuctionSeller/AuctionSeller.jasper";
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("sale_date", "2012-01-10");
        JasperPrint jasperPrint = JasperFillManager.fillReport(reportName, params, DB.getConn());
        OutputStream output = new FileOutputStream(new File("C:/JasperReport.pdf")); 
        JasperExportManager.exportReportToPdfStream(jasperPrint, output); 
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Can anybody tell me where did I miss or what do I have to make the report work. 有人可以告诉我我在哪里想念,或者我需要做什么才能使报告生效。

Thanks 谢谢

I could get the print from the following code: 我可以从以下代码获得打印结果:

String s = Dashboard.mail_seller.getSelectedItem().toString();
            String selected[] = s.split(" -- ");
            String seller_id = selected[0].trim();
            String filename = sale_date + "_" + selected[1].replaceAll(" ", "_").trim() + ".pdf";
            String reportName = reportPath + "AuctionSale/AuctionSellerMail/AuctionSeller.jasper";
            Map<String, Object> params = new HashMap<String, Object>();
            params.put("sale_date", sale_date);
            params.put("seller_id", seller_id);
            JasperPrint jasperPrint = JasperFillManager.fillReport(reportName, params, DB.getConn());
            OutputStream output = new FileOutputStream(new File("D:/Netbeans Projects/JDSons/mail_reports/"+filename+"")); 
            JasperExportManager.exportReportToPdfStream(jasperPrint, output); 
            output.flush();
            output.close();

Thanks guys 多谢你们

As you can see from this sample or from the full sample located in %jasperreports%\\demo\\samples\\subreport folder (from JasperReports distribution package) you can pass the compiled subreport as parameter. 该示例%jasperreports%\\demo\\samples\\subreport文件夹(来自JasperReports分发包)中的完整示例中可以看到,您可以将已编译的子报表作为参数传递。

The sample java code: 示例Java代码:

JasperReport subreport = (JasperReport) JRLoader.loadObjectFromFile("build/reports/ProductReport.jasper");

Map parameters = new HashMap();
parameters.put("ProductsSubreport", subreport);

JasperFillManager.fillReportToFile("build/reports/MasterReport.jasper", parameters, getDemoHsqldbConnection());

The snippet from MasterReport jrxml file: MasterReport jrxml文件中的代码段:

<parameter name="ProductsSubreport" class="net.sf.jasperreports.engine.JasperReport"/>
...
<detail>
    ...
        <subreport>
            <reportElement isPrintRepeatedValues="false" x="5" y="25" width="325" height="20" isRemoveLineWhenBlank="true" backcolor="#ffcc99"/>
            <subreportParameter name="City">
                    <subreportParameterExpression><![CDATA[$F{City}]]></subreportParameterExpression>
            </subreportParameter>
            <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
            <returnValue subreportVariable="PriceSum" toVariable="ProductTotalPrice" calculation="Sum"/>
            <subreportExpression class="net.sf.jasperreports.engine.JasperReport"><![CDATA[$P{ProductsSubreport}]]></subreportExpression>
        </subreport>
        <subreport>
            <reportElement positionType="Float" x="335" y="25" width="175" height="20" isRemoveLineWhenBlank="true" backcolor="#99ccff"/>
            <subreportParameter name="City">
                    <subreportParameterExpression><![CDATA[$F{City}]]></subreportParameterExpression>
            </subreportParameter>
            <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
            <returnValue subreportVariable="REPORT_COUNT" toVariable="CityAddressCount"/>
            <subreportExpression class="java.lang.String"><![CDATA["AddressReport.jasper"]]></subreportExpression>
        </subreport>
</detail>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM