我很难找到正确的最新信息。我发现的大多数信息都使用了不再使用的不推荐使用的方法。
我的程序允许用户在数据库中搜索一个人,在表中单击他们想要的人,从表中加载数据行,并将其存储到数组中。然后,数组被分解为变量,然后传递给这个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();