Java Jasper子报表InputStream标头不显示图像
我有一个主报表和子报表,我将一个参数作为inputstream传递给子报表。我将在子报表标题中将此参数用作徽标(图像)。如果将图像添加到子报表并使用此参数,子报表将仅显示数据源和图像的第一条记录。如果不使用此图像,我的子报表将列出数据源的所有记录。我试图把图像的细节,标题和标题,但它没有工作。如果我直接使用子报表中的图像,它工作得很好,但是我需要从Java发送这个参数(filepath) 有什么问题吗 编辑:我提供了一些代码 主要报告:Java Jasper子报表InputStream标头不显示图像,java,jasper-reports,subreport,Java,Jasper Reports,Subreport,我有一个主报表和子报表,我将一个参数作为inputstream传递给子报表。我将在子报表标题中将此参数用作徽标(图像)。如果将图像添加到子报表并使用此参数,子报表将仅显示数据源和图像的第一条记录。如果不使用此图像,我的子报表将列出数据源的所有记录。我试图把图像的细节,标题和标题,但它没有工作。如果我直接使用子报表中的图像,它工作得很好,但是我需要从Java发送这个参数(filepath) 有什么问题吗 编辑:我提供了一些代码 主要报告: <?xml version="1.0" encod
<?xml version="1.0" encoding="UTF-8"?>
<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="e-BordroIsciToplu" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="a3c2690b-2af8-4210-8775-cb69cd6557f7">
<property name="ireport.zoom" value="1.5394743546921228"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<property name="ireport.background.image.properties" value="true,true,0.25,138,273,0,0,386,161"/>
<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
<defaultValueExpression><![CDATA["W:\\Projects\\modules\\common\\src\\resources\\report\\templates\\"]]></defaultValueExpression>
</parameter>
<parameter name="ANTET" class="java.io.InputStream"/>
<parameter name="AY" class="java.lang.String"/>
<field name="topluInfo" class="java.util.List"/>
<detail>
<band height="109" splitType="Stretch">
<subreport runToBottom="false">
<reportElement positionType="Float" stretchType="RelativeToTallestObject" x="0" y="0" width="533" height="100" uuid="cd6571c7-c8da-4120-868f-82999376c3d3"/>
<parametersMapExpression><![CDATA[]]></parametersMapExpression>
<subreportParameter name="SUBREPORT_DIR">
<subreportParameterExpression><![CDATA[]]> </subreportParameterExpression>
</subreportParameter>
<subreportParameter name="AY">
<subreportParameterExpression><![CDATA[$P{AY}]]></subreportParameterExpression>
</subreportParameter>
<subreportParameter name="ANTET">
<subreportParameterExpression><![CDATA[$P{ANTET}]]></subreportParameterExpression>
</subreportParameter>
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{topluInfo})]]></dataSourceExpression>
<subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "e-topluSubreportTest.jasper"]]></subreportExpression>
</subreport>
</band>
</detail>
</jasperReport>
我找到了解决方案。我从子报表中删除图像,并将图像放在主报表的页眉中。它解决了我的问题,但我仍然想知道以前的问题,为什么它只显示一条记录。感谢您的评论和宝贵的时间。您的原始报告仅显示第一条记录的图像,因为InputStream只能读取一次。如果对打印多次的图像元素使用单个InputStream实例,第一次它可以正常工作,但之后它将无法从流中读取任何数据
你可以做两件事。一种是以字节数组而不是流的形式传递图像数据
第二种方法是为image元素设置isUsingCache=“true”
。这将在首次渲染元素时缓存图像对象,然后在再次打印图像元素时使用缓存的图像
从性能角度来看,第二种方法会更好,因为图像数据不会被多次读取。您还可以通过将图像数据作为字节数组传递并设置isUsingCache标志来组合解决方案。感谢您的回复,您似乎忘记了将参数传递给子报表(从主报表),但我在子报表中定义了参数,子报表仅显示一条记录的图像(标题)。问题是有些东西阻止在子报表中显示所有记录。我们可以使用一些示例JRXML文件来说明这个问题。我提供了一些代码。我阅读了关于这种情况的解释,它说图像参数在某些情况下阻止子报表第二次运行。所以它只显示第一条记录。我怎样才能摆脱这种局面?
<?xml version="1.0" encoding="UTF-8"?>
<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="e-topluSubreport" language="groovy" pageWidth="595" pageHeight="842" columnWidth="545" leftMargin="20" rightMargin="30" topMargin="20" bottomMargin="20" uuid="a3c2690b-2af8-4210-8775-cb69cd6557f7">
<property name="ireport.zoom" value="1.5394743546921228"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<property name="ireport.background.image.properties" value="true,true,0.25,138,273,0,0,386,161"/>
<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
<defaultValueExpression><![CDATA["W:\\Projects\\modules\\common\\src\\resources\\report\\templates\\"]]></defaultValueExpression>
</parameter>
<parameter name="ANTET" class="java.io.InputStream"/>
<parameter name="AY" class="java.lang.String"/>
<detail>
<band height="139" splitType="Stretch">
<staticText>
<reportElement x="5" y="105" width="185" height="15" uuid="023f69c4-13a4-419e-b64b-d41da9f937fa"/>
<box>
<pen lineWidth="0.25"/>
<topPen lineWidth="0.25"/>
<leftPen lineWidth="0.25"/>
<bottomPen lineWidth="0.25"/>
<rightPen lineWidth="0.25"/>
</box>
<textElement verticalAlignment="Middle">
<font size="8" isBold="true" pdfEncoding="Cp1254"/>
</textElement>
<text><![CDATA[ BORDRO TÜRÜ ]]></text>
</staticText>
<staticText>
<reportElement x="5" y="120" width="185" height="15" uuid="e7aac3af-4436-4488-9b00-e93ed875119f"/>
<box>
<pen lineWidth="0.25"/>
<topPen lineWidth="0.25"/>
<leftPen lineWidth="0.25"/>
<bottomPen lineWidth="0.25"/>
<rightPen lineWidth="0.25"/>
</box>
<textElement verticalAlignment="Middle">
<font size="8" isBold="true" pdfEncoding="Cp1254"/>
</textElement>
<text><![CDATA[ PARA BİRİMİ]]></text>
</staticText>
<staticText>
<reportElement x="5" y="79" width="500" height="15" uuid="55328d4d-8ce4-44aa-9217-405be02338b6"/>
<box>
<pen lineWidth="0.0"/>
<topPen lineWidth="0.0"/>
<leftPen lineWidth="0.0"/>
<bottomPen lineWidth="0.0"/>
<rightPen lineWidth="0.0"/>
</box>
<textElement verticalAlignment="Middle">
<font size="8" isBold="true" pdfEncoding="Cp1254"/>
</textElement>
<text><![CDATA[* test]]></text>
</staticText>
<image>
<reportElement x="5" y="23" width="101" height="35" uuid="057a515d-61a7-4f54-9c5e-234acaede0e5"/>
<imageExpression><![CDATA[$P{ANTET}]]></imageExpression>
</image>
</band>
<band height="50"/>
</detail>
</jasperReport>