我尝试使用 JasperSoft Studio 使用子报表,但我在下面得到了例外。虽然它存在,但它找不到子报告文件。
net.sf.jasperreports.engine.JRException:Resource not found at: D:\\JASPERREPORTS\\MyReports
以下是主报告的配置
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version last-->
<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" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="0a6d6643-1d79-4e5e-b39d-a773bba37c12">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="kai3_adapter"/>
<queryString>
<![CDATA[select * from cm_crew]]>
</queryString>
<field name="OID" class="java.math.BigDecimal"/>
<field name="CREW_OID" class="java.lang.String"/>
<field name="CONTACT_OID" class="java.math.BigDecimal"/>
<field name="ACTIVE" class="java.lang.String"/>
<field name="ONSHIFT" class="java.lang.String"/>
<field name="SHIFT_ID" class="java.lang.String"/>
<field name="SHIFT_START" class="java.sql.Timestamp"/>
<field name="CREW_STATUS" class="java.lang.String"/>
<group name="CREW_OID">
<groupExpression><![CDATA[$F{CREW_OID}]]></groupExpression>
</group>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="79" splitType="Stretch"/>
</title>
<pageHeader>
<band height="35" splitType="Stretch"/>
</pageHeader>
<columnHeader>
<band height="61" splitType="Stretch">
<staticText>
<reportElement x="0" y="0" width="141" height="20" uuid="fc7cf2eb-2922-42e3-b446-fa1cba3239d6"/>
<text><![CDATA[CREW_OID]]></text>
</staticText>
<staticText>
<reportElement x="141" y="0" width="138" height="20" uuid="1fb08aed-592e-437d-9c3c-87e763dc81f8"/>
<text><![CDATA[ACTIVE]]></text>
</staticText>
<staticText>
<reportElement x="279" y="0" width="138" height="20" uuid="76eaa47f-6f18-4210-a607-a6456b1cc4ed"/>
<text><![CDATA[ONSHIFT]]></text>
</staticText>
<staticText>
<reportElement x="417" y="0" width="138" height="20" uuid="273fca2c-2b50-4157-ab3b-8545d94855f3"/>
<text><![CDATA[CREW_STATUS]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="257" splitType="Stretch">
<textField>
<reportElement x="0" y="13" width="141" height="20" uuid="ef3acaa1-b11a-4b3d-b90d-7da18fc15dfa"/>
<textFieldExpression><![CDATA[$F{CREW_OID}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="141" y="13" width="138" height="20" uuid="2c29e96a-d712-4aff-9449-46f523ebbad8"/>
<textFieldExpression><![CDATA[$F{ACTIVE}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="279" y="13" width="81" height="20" uuid="70df46c9-e63a-45a0-8c6e-82e38c260681"/>
<textFieldExpression><![CDATA[$F{ONSHIFT}]]></textFieldExpression>
</textField>
<subreport>
<reportElement x="380" y="20" width="165" height="170" uuid="3c312fc6-a389-4e46-af09-ddb1bfaa353f"/>
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
<subreportExpression><![CDATA["D:\\JASPERREPORTS\\MyReports\\"]]></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>
答案 0 :(得分:2)
按照Sharad的回答,如果它仍然没有生成文件(发生在我身上),你可以试试这个:
在预览报告之前,您可以先尝试编译它。如果打开jrxml文件(包含子报表的文件),您可能会在编辑器的上方栏中看到一个小图标(带有一些二进制字符串的小文件)。单击此按钮应生成您期望的文件。
我创建了一个新答案,因为我想添加一个显示按钮的图像:
请注意,这也可能有效:使用&#34;项目&gt;清理包含报告的项目。清洁...&#34 ;.然后在&#34; Project Explorer&#34;中右键单击您的项目。 (通常在你的左边),然后点击&#34; Build Project&#34;。
答案 1 :(得分:1)
从调用报告的应用程序发送"SUBREPORT_DIR"
参数。
例如,在Java中:
params.put("SUBREPORT_DIR", "reports/folder/");
只需指向目录,而不是文件。
如果您使用Maven,请在pom.xml
答案 2 :(得分:0)
尝试在子报表路径中提供子报表名称,如下所示: -
"D:\\JASPERREPORTS\\MyReports\\subreport.jasper"
即使.jasper文件不存在,只需给出subreport.jasper它会自动编译subreport.jrxml文件并生成.jasper文件。