gpt4 book ai didi

java - Jasper子报表InputStream header 不显示图像

转载 作者:行者123 更新时间:2023-11-30 06:25:39 25 4
gpt4 key购买 nike

我有一个主报表和子报表,我将一个参数作为输入流传递给子报表。我将在我的子报表标题中使用此参数作为 Logo (图像)。如果我将图像添加到子报表并使用此参数,则子报表仅显示我的数据源和图像的第一条记录。如果我不使用此图像,我的子报告会列出我的数据源的所有记录。我尝试添加图像的详细信息、标题和标题,但没有成功。如果我直接使用子报表中的图像,效果很好,但我需要从 Java 发送此参数(文件路径)。

可能是什么问题?

编辑:我提供了一些代码。

主要报告:

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

子报告:

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

最佳答案

您的原始报告仅显示第一条记录的图像,因为 InputStream 只能读取一次。如果您对打印多次的图像元素使用单个 InputStream 实例,第一次它会正常工作,但随后它将无法从流中读取任何数据。

您可以做两件事。一种是将图像数据作为字节数组而不是流传递。

第二个是为图像元素设置isUsingCache="true"。这将在首次渲染元素时缓存图像对象,然后在再次打印图像元素时使用缓存的图像。

从性能角度来看,第二种方法会更好,因为图像数据不会被多次读取。您还可以通过将图像数据作为字节数组传递并设置 isUsingCache 标志来组合解决方案。

关于java - Jasper子报表InputStream header 不显示图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47264514/

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