gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 17:59:49 24 4
gpt4 key购买 nike

各位,

我在 Studio 中创建了一个报告,该报告使用 JSON 文件数据提供程序指向带有查询参数的 GET RESTful 端点。在 Studio 中,传递参数时报表可以正常工作。现在我正在尝试从 Java 控制台应用程序中生成报告,但并不真正知道如何使其运行。如果我直接将 JSON 传递给它,它效果很好,但如何让它调用 REST 端点?我是否需要在代码中调用端点,获取 JSON,然后将其传入?我希望 JasperReports 库能够做出决定。以下是该项目的相关部分。希望有人能提供帮助。

报告定义文件

<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>

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);

谢谢

最佳答案

所以我让它工作了。对于遇到同样问题的人,以下是解决方案。

将 Json Adapter 的定义放入项目内的目录中: project structure screenshot

在 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"/>

然后在您的 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();

就是这样!

关于java - JasperReports - 如何在 Java 中使用远程 JSON 数据报告运行报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60656986/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com