简体   繁体   English

JasperReports - 如何在 Java 中使用远程 JSON 数据报告运行报告

[英]JasperReports - How to run a report using Remote JSON Data Report in Java

Folks,各位,

I have a report created in Studio that uses the JSON File data provider pointing to a GET RESTful endpoint with query parameters.我在 Studio 中创建了一个报告,该报告使用 JSON 文件数据提供程序指向带有查询参数的 GET RESTful 端点。 In Studio, the report works fine when parameters are passed.在 Studio 中,当传递参数时报告工作正常。 Now I am trying to generate the report from within a Java console app but don't really know how to make it run.现在我正在尝试从 Java 控制台应用程序中生成报告,但不知道如何让它运行。 If I pass straight JSON to it, it works well, but how to do I get it to call the REST endpoint?如果我直接将 JSON 传递给它,它运行良好,但如何让它调用 REST 端点? Do I need to call the endpoint in my code, get the JSON and then pass it in?我是否需要在我的代码中调用端点,获取 JSON 然后将其传入? I was hoping that JasperReports library would make the call.我希望 JasperReports 库能够做出决定。 Below are the pertinent part of the project.. Hope someone can help.以下是该项目的相关部分..希望有人可以提供帮助。

The Report definition file报告定义文件

<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="Inventory01" pageWidth="842" pageHeight="595" orientation="Landscape" columnWidth="802" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="df013db5-f76e-44d3-b0df-bcbc46d93160">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="InventoryByProduct"/>
    <queryString language="json">
        <![CDATA[products]]>
    </queryString>
    <parameter name="storeno" class="java.lang.String" evaluationTime="Early">
        <property name="net.sf.jasperreports.http.data.url.parameter" value="store"/>
    </parameter>
    <parameter name="locale" class="java.lang.String" evaluationTime="Early">
        <property name="net.sf.jasperreports.http.data.url.parameter" value="locale"/>
    </parameter>
    <parameter name="product" class="java.lang.String" evaluationTime="Early">
        <property name="net.sf.jasperreports.http.data.url.parameter" value="product"/>
    </parameter>

The Java code Java代码

InputStream employeeReportStream = getClass().getResourceAsStream(reportFile);
jasperReport = JasperCompileManager.compileReport(employeeReportStream);

Map<String, Object> parameters = new HashMap<>();
parameters.put("locale", "en");
parameters.put("product", "680680976804");
parameters.put("storeno", "260");

//************ HOW SHOULD I CREATE THE JsonDataSource OBJECT AND PASS IT TO THE LIBRARY TO EXECUTE?
//************ IF ds WERE A JSON DOCUMENT, IT PRINTS CORRECTLY, BUT I NEED IT TO CALL THE URL OF THE 
//************ RESTFUL ENDPOINT
//            JsonDataSource ds = new JsonDataSource(jsonDataStream);
//            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, ds); 

Thanks谢谢

So I got it to work.所以我让它工作。 For those running into the same problem, below is the solution.对于遇到相同问题的人,以下是解决方案。

Put the definition of the Json Adapter in a directory within your project: project structure screenshot将 Json Adapter 的定义放在你的项目目录中:项目结构截图

In the jrxml report definition:在 jrxml 报告定义中:

<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="Inventory01" pageWidth="842" pageHeight="595" orientation="Landscape" columnWidth="802" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="df013db5-f76e-44d3-b0df-bcbc46d93160">
    <property name="net.sf.jasperreports.data.adapter" value="data/inventorydataadapter.xml"/>

Then in your Java code:然后在您的 Java 代码中:

            InputStream employeeReportStream = getClass().getResourceAsStream(reportFile);
            jasperReport = JasperCompileManager.compileReport(employeeReportStream);

            Map<String, Object> parameters = new HashMap<>();
            parameters.put("locale", "en");
            parameters.put("product", "680680976804");
            parameters.put("storeno", "260");

            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters);

            JRPdfExporter exporter = new JRPdfExporter();
            exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
            exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(outputPdf));
            SimplePdfReportConfiguration reportConfig = new SimplePdfReportConfiguration();
            reportConfig.setSizePageToContent(true);
            reportConfig.setForceLineBreakPolicy(false);
            SimplePdfExporterConfiguration exportConfig = new SimplePdfExporterConfiguration();
            exportConfig.setMetadataAuthor("Ali M");
            exportConfig.setEncrypted(true);
            exportConfig.setAllowedPermissionsHint("PRINTING");
            exporter.setConfiguration(reportConfig);
            exporter.setConfiguration(exportConfig);

            exporter.exportReport();

That's it!就是这样!

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

相关问题 JasperReports - JSON 数据报告在 Java 中运行时显示空值 - JasperReports - JSON Data Report Shows Null Values when run in Java 如何使用Java代码中的子报表运行JasperReports的报表。 找不到子报表 - How to run JasperReports's report with subreport in java code. Not found subreport 使用JasperReports在报告中添加超链接以进行报告 - Add hyperlinks in to report using JasperReports 如何在JasperReports中验证空报告? - How to validate empty report in JasperReports? 如何使用JasperReports API显示报告 - How to show report with JasperReports API JasperReports:如何在报告模板中调用 java bean 方法? - JasperReports: How to call a java bean method in report template? 如何将主报表数据源传递给子报表(JasperReports)? - How to pass master report data source to subreport (JasperReports)? 尝试使用Java打印JasperReports报告时,尝试再次查看该报告时,Tomcat Apache Server关闭 - On trying to print JasperReports report using Java, the Tomcat Apache Server is shutting down when trying to view the report again 如何使用JasperReports为单个报表传递多个结果集? - How to pass several resultsets for single report using JasperReports? JasperReports Server:如何使用url将报告导出为html文件 - JasperReports Server: How to export report as html file using url
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM