从JSON对象或JSON字符串创建Jasper报告PDF表单
使用JRBeanCollectionDataSource创建Jasper报告(PDF,Excel,Csv)时很好。 这意味着.jrxml文件接受pojo集合作为处理报告的输入。
现在,我一直在尝试使用相同的.jrxml创建jasper报告,但是来自JSON Object。 我尝试了以下内容,但所有值在pdf报告中都为空
Resource resource = new ClassPathXmlApplicationContext().getResource("classpath:reports/project.jrxml"); JsonDataSource ds = new JsonDataSource(new File("c:\myjson.json")); jasperDesign = JRXmlLoader.load(resource.getInputStream()); JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign); JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, ds); JasperExportManager.exportReportToPdfFile(jasperPrint, destination+fileName+".pdf");
谁能帮我?
我一直在努力使用JSON作为Jasper报告的DataSource,并且在网上缺乏体面的例子,我想我会在这里发布这个以供将来参考。
此示例是如何使用iReport Designer和JSON DataSource。
首先,输入JSON:
{ "userName": "Evil Raat", "details": { "email": "not_really@test.com" } }
然后在iReport Designer中创建一个JSON DataSource并将其指向您的文件(将所有其他详细信息保留为默认值)
接下来,您可以使用以下jrxml模板将上述JSON呈现为报表:
注意:必须首先定义字段元素,然后才能使用它们。 它们应该是使用标准点表示法从JSON输入文件的根目录开始的JSON路径。 有关示例,请参阅上面的fieldDescription元素。
定义字段后,您可以在文本字段中使用其计算值或其他:
希望能帮助一些人。
这就是我在jasper中处理json数组的方法
让我们说我想报告以下数组。
[ {"name":"Jerry", "value":"Jesus"}, {"name":"Gideon", "value": "Loves"}, {"name":"Eva", "value": "You"} ]
在设计报告时,请确保将字段命名为与json字段名称完全相同的名称。 所以在设计器中我会添加两个名为name和value的字段。 您甚至可以根据需要向报表设计器添加任意数量的参数。 在本例中,我将在Jasper Studio中添加一个名为title的参数。
现在这里是java代码,它将根据此测试数组创建jasper报告。 我将在代码中硬编码json数据,但您可以从文件或任何您认为最好的内容加载。 我评论了代码来解释发生了什么。
import net.sf.jasperreports.engine.export.JRHtmlExporterParameter; import net.sf.jasperreports.engine.export.JRXlsExporterParameter; import net.sf.jasperreports.engine.export.JRHtmlExporter; import net.sf.jasperreports.engine.export.JRXlsExporter; import net.sf.jasperreports.engine.data.JsonDataSource; import net.sf.jasperreports.engine.JRExporterParameter; import net.sf.jasperreports.engine.JasperExportManager; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.util.JRLoader; import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JasperPrint; import org.apache.commons.codec.binary.Base64; import java.util.HashMap; import java.util.Locale; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.io.*; //Class Name. This must match the class name you put in your build.gradle file public class JasperPDFExample { public static void main(String[] args) { try { try { //Our json object. This can be loaded from file String rawJsonData = "[{\"name\":\"Jerry\", \"value\":\"Jesus\"}," + "{\"name\":\"Gideon\", \"value\": \"Loves\"}," + "{\"name\":\"Eva\", \"value\": \"You\"}" + "]"; //Load compiled jasper report that we created on first section. JasperReport report = (JasperReport) JRLoader.loadObject(new File("/home/jerry/Sample.jasper")); //Convert json string to byte array. ByteArrayInputStream jsonDataStream = new ByteArrayInputStream(rawJsonData.getBytes()); //Create json datasource from json stream JsonDataSource ds = new JsonDataSource(jsonDataStream); //Create HashMap to add report parameters Map parameters = new HashMap(); //Add title parameter. Make sure the key is same name as what you named the parameter in jasper report. parameters.put("title", "Jasper PDF Example"); //Create Jasper Print object passing report, parameter json data source. JasperPrint jasperPrint = JasperFillManager.fillReport(report, parameters, ds); //Export and save pdf to file JasperExportManager.exportReportToPdfFile(jasperPrint,"/home/jerry/jasperpdfexample.pdf"); } catch (JRException ex) { ex.printStackTrace(); throw new RuntimeException(ex); } catch (Exception ex) { ex.printStackTrace(); throw new RuntimeException(ex); } } catch (Exception ex) { ex.printStackTrace(); throw new RuntimeException(ex); } } }
感谢https://mis.io/pub/how-to-create-a-jasper-pdf-report-from-a-json-datasource-in-java/我能够让它与设置一起工作java for jasper using gradle build tool。
- 如何在Apache Mina sshd-core版本0.14.0中覆盖getVirtualUserDir()
- 优雅地处理EJB / JPA环境中的约束违规?
- TrueZip – 如何解压缩内部jar / zip文件而不将它们扩展为目录?
- 如何以更有效的方式从大型集合文件中删除停用词?
- 有没有办法将ArrayList放入JTable,其中每一行是ArrayList的下一个索引?
- Spring Redis – 从application.properties文件中读取配置
- 如何在弹簧启动中使用线程安全控制器
- 运行具有外部依赖项的Scala脚本
- java.awt.HeadlessException – 未显示Applet