gpt4 book ai didi

jasper-reports - 为什么这么多未使用的空间,即使当前页面可以容纳大量数据,引擎也会跳到新页面

转载 作者:行者123 更新时间:2023-12-04 14:57:04 26 4
gpt4 key购买 nike

我使用 jasper studio 6.17 和 jasper library 6.17,每页末尾都有太多未使用的空白区域。我放了一张图片来显示问题。所以在记录 21 之后有很多空闲空间可以轻松容纳记录 22,23 和 24 但空间未被使用,这些记录直接显示在第 2 页。

enter image description here

这是 jrxml:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.17.0.final using JasperReports Library version 6.17.0-6d93193241dd8cc42629e188b94f9e0bc5722efd -->
<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="results" pageWidth="595" pageHeight="842" columnWidth="595" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" isFloatColumnFooter="true">
<field name="text" class="java.lang.String"/>
<field name="image" class="java.awt.Image"/>
<detail>
<band height="130" splitType="Stretch">
<textField isBlankWhenNull="true">
<reportElement x="0" y="0" width="595" height="29" isRemoveLineWhenBlank="true"/>
<box padding="0">
<pen lineWidth="1.25" lineStyle="Solid" lineColor="#030303"/>
</box>
<textElement>
<font fontName="DejaVu Sans" isBold="true"/>
<paragraph lineSpacingSize="0.0"/>
</textElement>
<textFieldExpression><![CDATA[$F{text}]]></textFieldExpression>
</textField>
<image>
<reportElement x="0" y="29" width="190" height="100" isRemoveLineWhenBlank="true"/>
<box>
<pen lineWidth="2.0" lineColor="#030303"/>
</box>
<imageExpression><![CDATA[$F{image}]]></imageExpression>
</image>
</band>
</detail>
</jasperReport>

这是完整的java代码:

public class JasperBAM {
public static void main(String[] args) {
try {
List<BAMResult> bhs = BAMResult.getBAMResults();
JasperPrint jasperPrint = JasperFillManager.fillReport("JasperReports/results.jasper", null, new JRBeanCollectionDataSource(bhs));
OutputStream outputStream = new FileOutputStream(new File("BAM.pdf"));
JasperExportManager.exportReportToPdfStream(jasperPrint, outputStream);
} catch (Exception ex) {
Logger.getLogger(JasperBAM.class.getName()).log(Level.SEVERE, null, ex);
}
}
}

public class BAMResult {
private String text;
private BufferedImage image;

public void settext(String text){this.text=text;}
public String gettext(){return text;}
public void setimage(){
try {
image=ImageIO.read(new File("image.png"));
} catch (IOException ex) {
Logger.getLogger(BAMResult.class.getName()).log(Level.SEVERE, null, ex);
}
}

public BufferedImage getimage() {
return image;
}

public static List<BAMResult> getBAMResults() {
try {
List<BAMResult> brs = new ArrayList<>();
for(int i=1; i<100; i++) {
BAMResult nt = new BAMResult();
nt.settext("record "+i);
if (i % 20==0){
nt.setimage();
}
brs.add(nt);
}
return brs;
} catch (Exception ex) {
Logger.getLogger(JasperBAM.class.getName()).log(Level.SEVERE, null, ex);
return null;
}
}
}

更新 1我尝试将详细信息带的“拆分类型”设置为“立即”,但仍然出现空格。

更新 2问题与图像字段无关,我尝试在图像的位置放置一个文本字段,问题是一样的。

最佳答案

band 高度的降低(您已设置为 130)仅在较新版本的 jasper 报告中发生。旧的布局概念是您不能降低 band 高度,只能增加它。因此,在旧版本的 jasper 报告中,每条记录的最小高度为 130(当图像不存在时,每条记录下方的空格)

我认为当他们在分页前计算详细信息带的可用空间时,您看到的是一个“错误”,因此他们没有考虑您的带可以动态减少,因为元素可以在呈现时从带内移除.

我的建议是一直沿用“”的设计理念,只让 band 高度增加

您可以通过使用框架或多个细节带轻松实现这一点

框架解决方案

想法是将对象放在您设置为最小高度的框架中,这样您就可以将细节带的高度降低到这个高度。然后框架可以溢出,并在必要时拉伸(stretch)细节带。

<?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="results" pageWidth="595" pageHeight="842" columnWidth="595" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" isFloatColumnFooter="true" uuid="176d8296-c530-48d6-85dc-11c41dce9f06">
<field name="text" class="java.lang.String"/>
<field name="image" class="java.awt.Image"/>
<detail>
<band height="30" splitType="Stretch">
<frame>
<reportElement x="0" y="0" width="595" height="29" uuid="7b3d35fe-eddb-4d8d-8016-6496b706950b">
<property name="com.jaspersoft.studio.unit.x" value="px"/>
<property name="com.jaspersoft.studio.unit.y" value="px"/>
</reportElement>
<textField isBlankWhenNull="true">
<reportElement x="0" y="0" width="595" height="29" isRemoveLineWhenBlank="true" uuid="92b46a19-42c0-42f2-846a-3c7a7aaf0e2a"/>
<box padding="0">
<pen lineWidth="1.25" lineStyle="Solid" lineColor="#030303"/>
</box>
<textElement>
<paragraph lineSpacingSize="0.0"/>
</textElement>
<textFieldExpression><![CDATA[$F{text}]]></textFieldExpression>
</textField>
<image>
<reportElement x="0" y="29" width="190" height="100" isRemoveLineWhenBlank="true" uuid="1dc15e42-01a4-413f-b04e-30b8d0437e36"/>
<box>
<pen lineWidth="2.0" lineColor="#030303"/>
</box>
<imageExpression><![CDATA[$F{image}]]></imageExpression>
</image>
</frame>
</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="results" pageWidth="595" pageHeight="842" columnWidth="595" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" isFloatColumnFooter="true" uuid="176d8296-c530-48d6-85dc-11c41dce9f06">
<field name="text" class="java.lang.String"/>
<field name="image" class="java.awt.Image"/>
<detail>
<band height="30" splitType="Stretch">
<property name="com.jaspersoft.studio.unit.height" value="px"/>
<textField isBlankWhenNull="true">
<reportElement x="0" y="0" width="595" height="29" isRemoveLineWhenBlank="true" uuid="92b46a19-42c0-42f2-846a-3c7a7aaf0e2a"/>
<box padding="0">
<pen lineWidth="1.25" lineStyle="Solid" lineColor="#030303"/>
</box>
<textElement>
<paragraph lineSpacingSize="0.0"/>
</textElement>
<textFieldExpression><![CDATA[$F{text}]]></textFieldExpression>
</textField>
</band>
<band height="100">
<printWhenExpression><![CDATA[new Boolean($F{image}!=null)]]></printWhenExpression>
<image>
<reportElement x="0" y="0" width="190" height="100" uuid="1dc15e42-01a4-413f-b04e-30b8d0437e36"/>
<box>
<pen lineWidth="2.0" lineColor="#030303"/>
</box>
<imageExpression><![CDATA[$F{image}]]></imageExpression>
</image>
</band>
</detail>
</jasperReport>

这两种解决方案都会呈现您要求的结果,与分页符有一些区别,在框架解决方案中,如果两者都不适合页面,您可以强制分页,而在双带解决方案中,您将有一个解决方案,其中 band 1 可以在一页上,band 2 在另一页上。

在设计 View 中,多细节带解决方案也更清晰一些,因为在框架解决方案中,图像看起来确实在带之外。

关于jasper-reports - 为什么这么多未使用的空间,即使当前页面可以容纳大量数据,引擎也会跳到新页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67753110/

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