我在纠结用Java生成JasperReport。不考虑数据源,因此所有值都为null,并且不显示子报表。
我从下面粘贴的JSON中创建了带有选项“填充报告时使用报告JSON表达式”的JSONData适配器。从Jasper Studio编译它时,它正在正确创建报告,而尝试从Java编译它会导致空报告(仅显示字段名),根本没有子报告。请帮助解决此问题。
{
"user": {
"firstName": "Mike",
"lastName": "Jones",
"email": "mikeJones@gmail.com",
"userStatus": "VALIDATED",
"documentList": [
{
"id": 2,
"documentType": "DRIVING_LICENSE",
"documentStatus": "APPROVED",
"comment": "",
"events": [
{
"action": "APPROVE",
"comment": "",
"createDate": "2018-05-24T10:44:55.987+0000"
}
]
},
{
"id": 1,
"documentType": "PASSPORT",
"documentStatus": "APPROVED",
"comment": "",
"events": [
{
"action": "APPROVE",
"comment": "",
"createDate": "2018-05-24T10:44:55.901+0000"
}
]
}
]
}
}
main.jrxml
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.6.0.final using JasperReports Library version 6.6.0 -->
<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="Blank_A4_7" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="ed8211ff-fccf-451c-9a4e-0b2075ebdfee">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="DataAdapter1.xml"/>
<queryString language="json">
<![CDATA[user]]>
</queryString>
<field name="firstName" class="java.lang.String">
<property name="net.sf.jasperreports.json.field.expression" value="firstName"/>
<fieldDescription><![CDATA[firstName]]></fieldDescription>
</field>
<field name="lastName" class="java.lang.String">
<property name="net.sf.jasperreports.json.field.expression" value="lastName"/>
<fieldDescription><![CDATA[lastName]]></fieldDescription>
</field>
<field name="email" class="java.lang.String">
<property name="net.sf.jasperreports.json.field.expression" value="email"/>
<fieldDescription><![CDATA[email]]></fieldDescription>
</field>
<field name="userStatus" class="java.lang.String">
<property name="net.sf.jasperreports.json.field.expression" value="userStatus"/>
<fieldDescription><![CDATA[userStatus]]></fieldDescription>
</field>
<field name="documentList" class="java.lang.String">
<property name="net.sf.jasperreports.json.field.expression" value="documentList"/>
<fieldDescription><![CDATA[documentList]]></fieldDescription>
</field>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="79" splitType="Stretch"/>
</title>
<pageHeader>
<band height="35" splitType="Stretch"/>
</pageHeader>
<columnHeader>
<band height="35" splitType="Stretch">
<staticText>
<reportElement x="-7" y="0" width="100" height="30" uuid="85f69194-56d8-413f-a550-1884c6c2ffdd">
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="03de927f-90a6-4a3b-b435-78f511e83566"/>
</reportElement>
<text><![CDATA[firstName]]></text>
</staticText>
<staticText>
<reportElement x="99" y="0" width="100" height="30" uuid="97a45c99-e11f-466e-83a9-0ee3125a888a">
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="e2dcce70-e78a-454f-897b-5961f5b060d7"/>
</reportElement>
<text><![CDATA[lastName]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="277" splitType="Stretch">
<textField>
<reportElement x="-10" y="0" width="100" height="30" uuid="d2158da3-7029-46b7-87e5-73dff198aa5c">
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="03de927f-90a6-4a3b-b435-78f511e83566"/>
</reportElement>
<textFieldExpression><![CDATA[$F{firstName}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="100" y="0" width="100" height="30" uuid="ffe6c4e3-0584-4ff0-bb85-8bc1c586424f">
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="e2dcce70-e78a-454f-897b-5961f5b060d7"/>
</reportElement>
<textFieldExpression><![CDATA[$F{lastName}]]></textFieldExpression>
</textField>
<subreport>
<reportElement x="-7" y="30" width="557" height="60" uuid="05a4dede-97de-4836-9195-114755ff921a"/>
<dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("documentList")]]></dataSourceExpression>
<subreportExpression><![CDATA["subreport.jasper"]]></subreportExpression>
</subreport>
</band>
</detail>
<columnFooter>
<band height="45" splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band height="54" splitType="Stretch"/>
</pageFooter>
<summary>
<band height="42" splitType="Stretch"/>
</summary>
</jasperReport>
subreport.jrxml
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.6.0.final using JasperReports Library version 6.6.0 -->
<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="Blank_A4_4" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="f841d01d-b1ed-4398-9c3a-85751cabd974">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="DataAdapter1.xml"/>
<queryString language="json">
<![CDATA[user.documentList]]>
</queryString>
<field name="id" class="java.lang.Integer">
<property name="net.sf.jasperreports.json.field.expression" value="id"/>
<fieldDescription><![CDATA[id]]></fieldDescription>
</field>
<field name="documentType" class="java.lang.String">
<property name="net.sf.jasperreports.json.field.expression" value="documentType"/>
<fieldDescription><![CDATA[documentType]]></fieldDescription>
</field>
<field name="documentStatus" class="java.lang.String">
<property name="net.sf.jasperreports.json.field.expression" value="documentStatus"/>
<fieldDescription><![CDATA[documentStatus]]></fieldDescription>
</field>
<field name="comment" class="java.lang.String">
<property name="net.sf.jasperreports.json.field.expression" value="comment"/>
<fieldDescription><![CDATA[comment]]></fieldDescription>
</field>
<field name="events" class="java.lang.String">
<property name="net.sf.jasperreports.json.field.expression" value="events"/>
<fieldDescription><![CDATA[events]]></fieldDescription>
</field>
<background>
<band splitType="Stretch"/>
</background>
<detail>
<band height="36" splitType="Stretch">
<textField>
<reportElement x="-7" y="5" width="100" height="30" uuid="b904bfb3-ac61-4141-bbd4-813aa6101945"/>
<textFieldExpression><![CDATA[$F{documentType}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="120" y="3" width="100" height="30" uuid="85c25658-8388-4eb0-ae5b-b376ce801d0f"/>
<textFieldExpression><![CDATA[$F{documentStatus}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
Test.java
public class Test {
public static void main(String[] args) {
try {
String pathToReports = "/home/test/";
Map<String, Object> params = new HashMap<>();
params.put(JsonQueryExecuterFactory.JSON_DATE_PATTERN, "yyyy-MM-dd");
params.put(JsonQueryExecuterFactory.JSON_NUMBER_PATTERN, "#,##0.##");
params.put(JsonQueryExecuterFactory.JSON_LOCALE, Locale.ENGLISH);
params.put(JRParameter.REPORT_LOCALE, Locale.US);
JRDataSource jsonDataSource = new JsonDataSource(new File("/home/test/example.json"));
JasperReport jasperReport = JasperCompileManager.compileReport(pathToReports + "main.jrxml");
JasperCompileManager.compileReportToFile(pathToReports + "subreport.jrxml", "subreport.jasper");
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, jsonDataSource);
JasperExportManager.exportReportToPdfFile(jasperPrint, "/home/test/test.pdf");
} catch (Exception e) {}
}
}
从Java代码运行时,您报告是空的,因为您没有默认的数据适配器。和Jaspersoft工作室的不一样。要么设置它:
>
或直接使用报表级别属性:
问题内容: 我想要一个从JSON生成Java源文件的实用程序。例如我们有 我们将此传递给实用程序,并希望它生成如下内容: 编写起来并不难,但是我敢肯定有人已经做到了。 问题答案: 尝试: http://www.jsonschema2pojo.org Orsol,我确定你在这里还没有等待解决方案,但是为了下一个找到此线程的人,我想我会添加一些更多信息。 自从09年12月问这个问题以来发生了两件事:
问题内容: 我有一个巨大的QuickBooks SDK .XSD模式文件,该文件定义了我可以从QuickBooks发送/接收的XML请求/响应。 我希望能够轻松地从这些.XSD文件生成Java类,然后将其用于将XML编组为Java对象,以及将Java对象编组为XML。 是否有捷径可寻…? 理想情况下,它在运行时不需要基本Java发行版外部的任何库。但是我很灵活 问题答案: JAXB确实可以满足您的
我有一个JSON文件。我正在寻找任何有助于根据该JSON文件生成AVRO模式的程序/工具。我不关心数据类型。只要AVRO模式结构是基于JSON生成的,它都可以是字符串。 目标是,我试图只使用json文件创建一个avro文件。为此,我需要avro模式。 所以,如果我有一个avro模式,使用avro工具,我将能够通过提供avro模式和JSON文件作为输入来生成avro文件。 任何进一步的帮助/建议将不
问题内容: 我正在努力开发一个android应用程序。我需要使用网络服务。我有一个wsdl文件,但我想将其转换为java,以便可以在Java程序中使用其功能。有什么方法可以将wsdl文件转换为Java? 问题答案: 是的,您可以使用: WSDL2Java Eclipse插件 有了这些,您只需提供wsdl,就会自动为您生成Java类的客户端。
如何通过命令行生成?我尝试了命令,但这不起作用。
问题内容: json.php代码 我必须生成文件。 问题答案: 这是一个示例代码: