如何根据动态内容拉伸 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="tree-template" pageWidth="595" pageHeight="842" columnWidth="481" leftMargin="57" rightMargin="57" topMargin="72" bottomMargin="72">
<style name="Title" forecolor="#000000" fontName="Times New Roman" fontSize="50" isBold="false" pdfFontName="Times-Bold"/>
<style name="SubTitle" forecolor="#666666" fontName="Times New Roman" fontSize="18" isBold="false" pdfFontName="Times-Roman"/>
<style name="Column header" forecolor="#666666" fontName="Times New Roman" fontSize="14" isBold="true" pdfFontName="Times-Roman"/>
<style name="Detail" mode="Transparent" fontName="Times New Roman" pdfFontName="Times-Roman"/>
<style name="Row" mode="Transparent" fontName="Times New Roman" pdfFontName="Times-Roman">
<conditionalStyle>
<conditionExpression><![CDATA[$V{REPORT_COUNT}%2 == 0]]></conditionExpression>
<style mode="Opaque" backcolor="#F0EFEF"/>
</conditionalStyle>
</style>
<parameter name="JasperCustomSubReportLocation" class="net.sf.jasperreports.engine.JasperReport"/>
<parameter name="JasperCustomSubReportDatasource" class="net.sf.jasperreports.engine.data.JRBeanCollectionDataSource"/>
<field name="name" class="java.lang.String"/>
<field name="notes" class="java.lang.String"/>
<field name="state" class="java.lang.String"/>
<field name="project" class="com.pearson.ltg.qmo.dashboard.domain.QDashProject">
<fieldDescription><![CDATA[project]]></fieldDescription>
</field>
<field name="theme" class="java.lang.String"/>
<field name="goals" class="java.lang.String"/>
<field name="statusDetails" class="java.lang.String"/>
<field name="mitigation" class="java.lang.String"/>
<field name="status" class="java.lang.String"/>
<field name="releaseDate" class="java.util.Calendar"/>
<group name="Group1">
<groupExpression><![CDATA[(int)($V{REPORT_COUNT}/15)]]></groupExpression>
</group>
<group name="Group2">
<groupExpression><![CDATA[(int)($V{REPORT_COUNT}/5)]]></groupExpression>
<groupHeader>
<band height="10"/>
</groupHeader>
</group>
<title>
<band height="58" splitType="Stretch">
<staticText>
<reportElement style="Title" x="4" y="0" width="477" height="56"/>
<textElement>
<font size="48" isBold="false"/>
</textElement>
<text><![CDATA[Release Details]]></text>
</staticText>
</band>
</title>
<detail>
<band height="189" splitType="Stretch">
<frame>
<reportElement mode="Opaque" x="0" y="7" width="481" height="13" forecolor="#D0B48E" backcolor="#9DB1B8"/>
</frame>
<textField>
<reportElement x="279" y="7" width="202" height="13"/>
<textElement/>
<textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="79" y="7" width="100" height="13"/>
<textElement/>
<textFieldExpression class="java.lang.String"><![CDATA[$F{project}.getName()]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="2" y="7" width="79" height="13"/>
<textElement>
<font isBold="true"/>
</textElement>
<text><![CDATA[Platform : ]]></text>
</staticText>
<staticText>
<reportElement x="179" y="7" width="100" height="13"/>
<textElement>
<font size="10" isBold="true" isItalic="false"/>
</textElement>
<text><![CDATA[Release Name :]]></text>
</staticText>
<staticText>
<reportElement x="0" y="20" width="47" height="20"/>
<textElement>
<font isBold="true"/>
</textElement>
<text><![CDATA[Status : ]]></text>
</staticText>
<textField>
<reportElement x="79" y="20" width="100" height="20"/>
<textElement/>
<textFieldExpression class="java.lang.String"><![CDATA[$F{status}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="0" y="40" width="79" height="20"/>
<textElement>
<font isBold="true"/>
</textElement>
<text><![CDATA[Release Date: ]]></text>
</staticText>
<staticText>
<reportElement x="0" y="60" width="181" height="20"/>
<textElement>
<font isBold="true"/>
</textElement>
<text><![CDATA[Release Goals]]></text>
</staticText>
##want this field to auto stretch as per content##
<textField isStretchWithOverflow="true" isBlankWhenNull="true">
<reportElement positionType="Float" stretchType="RelativeToTallestObject" x="0" y="80" width="463" height="20"/>
<textElement>
<font size="10"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{goals}==null ? "Not Defined":$F{goals}]]></textFieldExpression>
</textField>
##want this field to auto stretch as per content##
<staticText>
<reportElement stretchType="RelativeToTallestObject" x="0" y="100" width="98" height="20"/>
<textElement>
<font isBold="true"/>
</textElement>
<text><![CDATA[Status Details]]></text>
</staticText>
<textField isStretchWithOverflow="true">
<reportElement stretchType="RelativeToTallestObject" x="2" y="120" width="463" height="20"/>
<textElement/>
<textFieldExpression class="java.lang.String"><![CDATA[$F{statusDetails}==null ? "Not Defined":$F{statusDetails}]]></textFieldExpression>
</textField>
<staticText>
<reportElement stretchType="RelativeToTallestObject" x="0" y="140" width="98" height="20"/>
<textElement>
<font isBold="true"/>
</textElement>
<text><![CDATA[Risk Mitigation]]></text>
</staticText>
<textField>
<reportElement stretchType="RelativeToTallestObject" x="18" y="160" width="463" height="20"/>
<textElement/>
<textFieldExpression class="java.lang.String"><![CDATA[$F{mitigation}==null?"Not Defined":$F{mitigation}]]></textFieldExpression>
</textField>
<textField>
<reportElement stretchType="RelativeToTallestObject" x="79" y="40" width="100" height="20"/>
<textElement/>
<textFieldExpression class="java.lang.String"><![CDATA[new SimpleDateFormat("MMM dd,yyyy").format($F{releaseDate}.getTime())]]></textFieldExpression>
</textField>
<line>
<reportElement x="0" y="180" width="481" height="1"/>
</line>
</band>
</detail>
<columnFooter>
<band height="12" splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band height="13" splitType="Stretch">
<frame>
<reportElement mode="Opaque" x="0" y="0" width="477" height="13" forecolor="#D0B48E" backcolor="#9DB1B8"/>
<textField pattern="EEEEE dd MMMMM yyyy">
<reportElement style="Column header" x="2" y="0" width="197" height="13" forecolor="#FFFFFF"/>
<textElement verticalAlignment="Middle">
<font size="10" isBold="false"/>
</textElement>
<textFieldExpression class="java.util.Date"><![CDATA[new java.util.Date()]]></textFieldExpression>
</textField>
<textField evaluationTime="Report">
<reportElement style="Column header" x="450" y="0" width="27" height="13" forecolor="#FFFFFF"/>
<textElement verticalAlignment="Middle">
<font size="10" isBold="false"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[" " + $V{PAGE_NUMBER}]]></textFieldExpression>
</textField>
<textField>
<reportElement style="Column header" x="370" y="0" width="80" height="13" forecolor="#FFFFFF"/>
<textElement textAlignment="Right" verticalAlignment="Middle">
<font size="10" isBold="false"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA["Page "+$V{PAGE_NUMBER}+" of"]]></textFieldExpression>
</textField>
</frame>
</band>
</pageFooter>
</jasperReport>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
只需将
isStretchWithOverflow="true"
添加到您想要作为元素的 textField 即可。Just add the
isStretchWithOverflow="true"
to the textField that you want as an element.它对我来说有效。
It worked in my case.
如果您使用的是Jaspersoft Studio,请单击要更改的文本字段,导航至其属性,进入文本字段选项卡并将“文本调整”更改为
StretchHeight
(默认为CutText
)。另外,如果您的文本字段位于框架中,则应将其位置类型设置为浮动
If you are using Jaspersoft Studio, click on the text field you want to change, navigate to its properties, enter the Text Field tab and change Text Adjust to
StretchHeight
(default isCutText
). Also, if your text field is in the frame, you should set its Position Type toFloat
得到了解决方案。将所有静态文本字段和所有元素属性修改为
positionType="Float"
。Got the solution. Modified all the static text fields and all the elements properties to
positionType="Float"
.您可以添加属性 isStretchWithOverflow 设置为 true
You can add attribute isStretchWithOverflow set is true
<textField isStretchWithOverflow="true">
带有
positionType="Float"
的textAdjust="StretchHeight"
解决了字段内的增长问题,但在类似列表的布局中(但您不想使列表)相邻字段保持原位。我通过反复试验找到了一个带有框架的解决方案。
使用
创建一个框架... 围绕 2 个字段和静态文本的
。您还可以使用 Jaspersoft Studio 中的拖放功能。它看起来像这样:

结果:
The
textAdjust="StretchHeight"
withpositionType="Float"
solves the growth problem inside a field, but in a list-like layout (but you don't want to make a list) the neighboring fields stay in place.I found a solution with frames by trial and error.
Create a frame with
<frame><reportElement positionType="Float" .../> ... </frame>
around the 2 fields and the static text. You can also use the drag and drop functition in Jaspersoft Studio.It will look something like this:

Result:
该字段可以在溢出时自动拉伸,但它会向下(有点自动换行)而不是增加宽度。在 PDF 文档中,您所寻找的选项几乎没有用处。
检查此其他线程以获取更多信息 动态列单元格宽度
编辑 另外检查并包含 jasperreports 字体扩展。也许它可以帮助完美部署,而不会出现操作系统字体问题。
The field can auto stretch with overflow, but it goes down (kinda word wrap) instead of increasing width. In PDF documents that option you look out for, would be of little or no use.
Check this other thread for further info Dynamic column cell width
EDIT Also check and include jasperreports fonts extension. Maybe it could help on a flawless deploy without OS fonts' issues.
如果您使用的是 JasperSoft Studio,则需要设置三个属性:
首先需要选择字段,然后设置这些属性。
最高的物体。
还要记住设置要拉伸的带宽。
If you are using a JasperSoft Studio then you need to set three properties:
first you need to select the field then set these properties.
tallest object.
Also remember to set band width to stretch.
[仅适用于 Jasper 表] 选择列中存在的文本字段,然后选择
1. 持仓类型:相对于顶部固定
2. 拉伸类型:相对于表带高度
3. 溢出拉伸:true
对所有其他列应用相同的方法
现在,当其中一列垂直增长时,其他字段将自动居中对齐!
结果如下
[Applicable only to Jasper Table] select the Text Field present inside a column and select
1. Position Type: Fix relative to Top
2. Stretch Type: Relative to Band Height
3. Stretch with Overflow: true
Apply the same to all other columns
Now, when one of the columns grow vertically, then other fields will be aligned center automatically!!
Result below