将参数发送到Jasper Report并导出到.docx而不使用数据库



我很难找到正确的最新信息。我发现的大多数信息都使用了不再使用的不推荐使用的方法。

我的程序允许用户在数据库中搜索一个人,在表中单击他们想要的人,从表中加载数据行,并将其存储到数组中。然后,数组被分解为变量,然后传递给这个PrintCertificate()类,在这个类中,所有参数都被传递到我在Studio中创建的.jrxml Jasper Report中,并填充证书中的空部分。

 package print;
 import net.sf.jasperreports.engine.*;
 import net.sf.jasperreports.engine.export.*;
 import java.util.*;
public class PrintCertificate  
{   
public PrintCertificate(String output, String certType, String name, String pNames, String bapDate, String confirmDate, String pastorName, String sponsorName)
{
    if(certType=="rci_eng")
    {
        String fileName = "/RCI_Eng";
        output = "C:/Users/User/Desktop/Test/";
        HashMap<String, Object> param = new HashMap<String, Object>();
        param.put("Full_Name",name);
        param.put("Parent_Names", pNames);
        param.put("DateOfBaptism", bapDate);
        param.put("PastorName", pastorName);
        param.put("SponsorName", sponsorName);
        try
        {
            JasperPrint print = JasperFillManager.fillReport(fileName, param);
            JRDocxExporter exporter = new JRDocxExporter();
            exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
            exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, "test.docx");
            exporter.exportReport(print);
        }
        catch (Exception e)
        {
            e.printStackTrace();
            System.exit(1);
        }
    }
}

}

我显然知道很多事情已经不正确了,包括输出和output_FILE_TYPE,但我需要知道我是否走在正确的轨道上,以及是否有什么可以让这件事变得更容易。

问题是,我是否在正确的轨道上是一个有点宽的

您可以使用参数映射*,您可以使用来自jasper报表的查询(请参见@MadProgrammer注释),您可以直接将PrintCertificate作为数据源传递。

*注意:使用参数映射,您不会将任何数据放在详细带中,并且只能创建1个证书。

哪个最好,在jasper报表中执行查询或传递参数可能在报表开发过程中具有预览的优势,因此可以设置默认值;使用PrintCertificate类作为数据源的优点是可以轻松地格式化/处理输出(因为jasper将调用类中的方法)。

"正常"的方式是在jasper报告中执行一个查询,将idperson作为参数传递(因此,相对于您想要查看的人,查询将找到1条记录)。字段是由IDE自动生成的,您可以轻松地为不同的人测试它,也可以轻松地更改查询以导出多个证书ecc。

但最终选择权在你。。。

你在哪里没有走上正轨(这就是我回答的原因)

自从jasper版本5.6 以来,JRExporterParameter已被弃用

正确的方式,因为这个版本将是:

JRDocxExporter export = new JRDocxExporter();
export.setExporterInput(new SimpleExporterInput(jasperPrint));
export.setExporterOutput(new SimpleOutputStreamExporterOutput(new File("test.docx")));
SimpleDocxReportConfiguration config = new SimpleDocxReportConfiguration();
//config.setFlexibleRowHeight(true); //Set desired configuration
export.setConfiguration(config);
export.exportReport();

相关内容

  • 没有找到相关文章

最新更新