JasperReports/iReport中,Text Field的字串長度過長,如何自動斷行(換行),避免值被截斷

版本

JasperReports版本為4.0.1。

前言

有個報表設計如下,其中紅框處的Text Field其寬度為226。


此份報表的資料來源,包含了三筆記錄,其中有一筆記錄的ADDRESS為「大台南市永康區永元路123段456巷789弄876號543樓之21室」。如果報表不做任何設定,則產生出來的報表,這筆記錄的ADDRESS會被截斷成如下圖紅框處(之21室消失了):



解決方案一

這時候解決方式之一是增加band的高度,同時增加每個Text Field的高度,如下圖:


但這樣子的調整只是治標不治本,因為日後可能會有新的記錄,其ADDRESS的字串長度更長;而且上述的調整會導致所有記錄的高度都增加,如下圖:


解決方案二

為了彈性調整每筆記錄的高度,而且能夠正確顯示ADDRESS,使其不會被截斷(亦即自動換行),可以設定Text Field的屬性《Stretch With Overflow》為true,如下圖。如此一來,當ADDRESS長度超過Text Field的長度時,會自動伸展Text Field的高度,以顯示完整的ADDRESS。


但是,上述做法只會伸展有設定《Stretch With Overflow》為true的Text Field而已,亦即不會變動其他Text Field的高度,造成如下圖中格線沒有對齊的情形:


這時候要調整其他欄位的《Stretch Type》屬性,將其設成Relative to Band Height,則報表的格線就會對齊了:


可是這時折行後的字卻會蓋到格線,要解決這種情形,就得調整Text Field的padding,做法如下:

1. 對Text Field點選右鍵,選擇Padding And Borders,如下圖。


2. 在出現的視窗中,將Padding frame中的Bottom的值從0改成5,然後按下OK。


調整後產生的報表為:


結論

要避免Text Field的值,其字串長度過長,而無法完全顯示在Text Field中,亦即自動換行,總共有三個步驟:
1. 設定可能字串長度過長的Text Field的屬性《Stretch With Overflow》為true。
2. 設定其他Text Field的屬性《Stretch Type》為Relative to Band Height。
3. 調整Text Field的padding。

jrxml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
<? 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/jasperreportshttp://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name = "Report"  pageWidth = "595"  pageHeight = "842"  columnWidth = "555" leftMargin = "20"  rightMargin = "20"  topMargin = "20"  bottomMargin = "20" >
  < property  name = "ireport.zoom"  value = "1.4641000000000006" />
  < property  name = "ireport.x"  value = "0" />
  < property  name = "ireport.y"  value = "75" />
  < querystring  language = "SQL" >
   <![CDATA[SELECT
      HOWARD_CUSTOMER."ID" AS HOWARD_CUSTOMER_ID,
      HOWARD_CUSTOMER."NAME" AS HOWARD_CUSTOMER_NAME,
      HOWARD_CUSTOMER."TEL" AS HOWARD_CUSTOMER_TEL,
      HOWARD_CUSTOMER."ADDRESS" AS HOWARD_CUSTOMER_ADDRESS
FROM
      "HOWARD_CUSTOMER" HOWARD_CUSTOMER]]>
  </ queryString >
  < field  name = "HOWARD_CUSTOMER_ID"  class = "java.lang.String" />
  < field  name = "HOWARD_CUSTOMER_NAME"  class = "java.lang.String" />
  < field  name = "HOWARD_CUSTOMER_TEL"  class = "java.lang.String" />
  < field  name = "HOWARD_CUSTOMER_ADDRESS"  class = "java.lang.String" />
  < title >
   < band  height = "59"  splitType = "Stretch" >
    < statictext >
     < reportelement  x = "230"  y = "0"  width = "81"  height = "59" />
     < textelement >
      < font  size = "36"  isBold = "true" />
     </ textElement >
     < text > <![CDATA[Test]]> </ text >
    </ staticText >
   </ band >
  </ title >
  < columnheader >
   < band  height = "20"  splitType = "Stretch" >
    < statictext >
     < reportelement  x = "0"  y = "0"  width = "53"  height = "20" />
     < box >
      < pen  lineWidth = "1.0"  lineStyle = "Solid" />
      < toppen  lineWidth = "1.0"  lineStyle = "Solid" />
      < leftpen  lineWidth = "1.0"  lineStyle = "Solid" />
      < bottompen  lineWidth = "1.0"  lineStyle = "Solid" />
      < rightpen  lineWidth = "1.0"  lineStyle = "Solid" />
     </ box >
     < textElement />
     < text > <![CDATA[ID]]> </ text >
    </ staticText >
    < statictext >
     < reportelement  x = "53"  y = "0"  width = "138"  height = "20" />
     < box >
      < pen  lineWidth = "1.0"  lineStyle = "Solid" />
      < toppen  lineWidth = "1.0"  lineStyle = "Solid" />
      < leftpen  lineWidth = "1.0"  lineStyle = "Solid" />
      < bottompen  lineWidth = "1.0"  lineStyle = "Solid" />
      < rightpen  lineWidth = "1.0"  lineStyle = "Solid" />
     </ box >
     < textElement />
     < text > <![CDATA[NAME]]> </ text >
    </ staticText >
    < statictext >
     < reportelement  x = "191"  y = "0"  width = "138"  height = "20" />
     < box >
      < pen  lineWidth = "1.0"  lineStyle = "Solid" />
      < toppen  lineWidth = "1.0"  lineStyle = "Solid" />
      < leftpen  lineWidth = "1.0"  lineStyle = "Solid" />
      < bottompen  lineWidth = "1.0"  lineStyle = "Solid" />
      < rightpen  lineWidth = "1.0"  lineStyle = "Solid" />
     </ box >
     < textElement />
     < text > <![CDATA[PHONE NO]]> </ text >
    </ staticText >
    < statictext >
     < reportelement  x = "329"  y = "0"  width = "226"  height = "20" />
     < box >
      < pen  lineWidth = "1.0"  lineStyle = "Solid" />
      < toppen  lineWidth = "1.0"  lineStyle = "Solid" />
      < leftpen  lineWidth = "1.0"  lineStyle = "Solid" />
      < bottompen  lineWidth = "1.0"  lineStyle = "Solid" />
      < rightpen  lineWidth = "1.0"  lineStyle = "Solid" />
     </ box >
     < textElement />
     < text > <![CDATA[ADDRESS]]> </ text >
    </ staticText >
   </ band >
  </ columnHeader >
  < detail >
   < band  height = "18"  splitType = "Immediate" >
    < textfield >
     < reportelement  stretchType = "RelativeToBandHeight"  x = "0"  y = "0" width = "53"  height = "18" />
     < box >
      < pen  lineWidth = "1.0"  lineStyle = "Solid" />
      < toppen  lineWidth = "1.0"  lineStyle = "Solid" />
      < leftpen  lineWidth = "1.0"  lineStyle = "Solid" />
      < bottompen  lineWidth = "1.0"  lineStyle = "Solid" />
      < rightpen  lineWidth = "1.0"  lineStyle = "Solid" />
     </ box >
     < textElement />
     < textfieldexpression  class = "java.lang.String" > <![CDATA[$F{HOWARD_CUSTOMER_ID}]]> </ textFieldExpression >
    </ textField >
    < textfield >
     < reportelement  stretchType = "RelativeToBandHeight"  x = "53"  y = "0" width = "138"  height = "18" />
     < box >
      < pen  lineWidth = "1.0"  lineStyle = "Solid" />
      < toppen  lineWidth = "1.0"  lineStyle = "Solid" />
      < leftpen  lineWidth = "1.0"  lineStyle = "Solid" />
      < bottompen  lineWidth = "1.0"  lineStyle = "Solid" />
      < rightpen  lineWidth = "1.0"  lineStyle = "Solid" />
     </ box >
     < textElement />
     < textfieldexpression  class = "java.lang.String" > <![CDATA[$F{HOWARD_CUSTOMER_NAME}]]> </ textFieldExpression >
    </ textField >
    < textfield >
     < reportelement  stretchType = "RelativeToBandHeight"  x = "191"  y = "0" width = "138"  height = "18" />
     < box >
      < pen  lineWidth = "1.0"  lineStyle = "Solid" />
      < toppen  lineWidth = "1.0"  lineStyle = "Solid" />
      < leftpen  lineWidth = "1.0"  lineStyle = "Solid" />
      < bottompen  lineWidth = "1.0"  lineStyle = "Solid" />
      < rightpen  lineWidth = "1.0"  lineStyle = "Solid" />
     </ box >
     < textElement />
     < textfieldexpression  class = "java.lang.String" > <![CDATA[$F{HOWARD_CUSTOMER_TEL}]]> </ textFieldExpression >
    </ textField >
    < textfield  isStretchWithOverflow = "true" >
     < reportelement  x = "329"  y = "0"  width = "226"  height = "18" />
     < box  bottomPadding = "5" >
      < pen  lineWidth = "1.0"  lineStyle = "Solid" />
      < toppen  lineWidth = "1.0"  lineStyle = "Solid" />
      < leftpen  lineWidth = "1.0"  lineStyle = "Solid" />
      < bottompen  lineWidth = "1.0"  lineStyle = "Solid" />
      < rightpen  lineWidth = "1.0"  lineStyle = "Solid" />
     </ box >
     < textelement >
      < font  fontName = "細明體"  pdfFontName = "細明體" pdfEncoding = "Identity-H"  isPdfEmbedded = "false" />
     </ textElement >
     < textfieldexpression  class = "java.lang.String" > <![CDATA[$F{HOWARD_CUSTOMER_ADDRESS}]]> </ textFieldExpression >
    </ textField >
   </ band >
  </ detail >
  < pagefooter >
   < band  height = "21"  splitType = "Stretch" >
    < textfield >
     < reportelement  x = "205"  y = "0"  width = "80"  height = "20" />
     < textelement  textAlignment = "Right" />
     < textfieldexpression  class = "java.lang.String" > <![CDATA["Page "+$V{PAGE_NUMBER}+" of"]]> </ textFieldExpression >
    </ textField >
    < textfield  evaluationTime = "Report" >
     < reportelement  x = "285"  y = "0"  width = "40"  height = "20" />
     < textElement />
     < textfieldexpression  class = "java.lang.String" > <![CDATA[" " + $V{PAGE_NUMBER}]]> </ textFieldExpression >
    </ textField >
   </ band >
  </ pageFooter >
</ jasperReport >
]]>

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
2.5主要变动: 1.重要改进:新版本Delphi下的VCL控件已经比较完善,封装良好,与Delphi无缝连接,改变了旧版需要将Dataset的数据复制到报表引擎的实现方式,通过模拟ADO接口的方式直接支持BDE/ClientDataset/等非ADO方式的Dataset,不需要考虑太多的COM方面的因素,强烈建议Delphi的开发者直接使用该VCL控件。 使用VCL控件编译的程序发布时,将AcReport.dll和您的EXE放在同一个文件夹下一起发布即可,不需要运行RegSvr32来注册控件,VCL的代码会自动注册该控件。 2.完善文本控制方式(在设计器界面上增加了此项菜单): 1).当文本控制设置为自动适应单元格(自动缩放字体)时,选择上对齐方式时,也能自动换行。 2)当文本控制设置为截断字符时,支持自动换行,保持单元格的高不变,在某些特殊应用,不管文本如何变化,可以保持表格的形状不变。 3.增加了OnSaveReport事件,当用户在设计器点击“保存”按扭时,会触发此事件,程序可以响应此事件执行自定义保存,例如可以将报表保存到数据库,或者返回一个信息给设计器用户。 4.直接支持ADO.net的Dataset和DataTable对象,不需要再通过CustDataBuiler对象来转换,大大提高了在.net下的运行速。(需要引用 AcNetUtils.dll,具体使用方法请参考Demo) 代码示例: //Dataset: //2.5以前的版本需要将Ado.net下datatable在ACcopy一个复本,速比较慢 // AcReport.AcUtils.CopyDatasetToAcRptEngine(mDataset, mac, false); //新版本的处理方式,通过ADO-ADO.net适配器的方式直接访问 DbAdapter.FillDatasetToAC(mDataset, mac); //DataTable: mDataset.Tables["zlemployee"].TableName = "雇员档案"; AcReport.AcUtils.CopyTableToAcRptEngine(mDataset.Tables["雇员档案"], mac, false); //重新加入一个表到AcReport (旧版本方式) //在2.5以后的版本,可以用如下的方式将ADO.net的DataTable对象通过AcRecordsetAdapter转换为ADO接口的方式直接加入到AcEngine, //这样做就不需要在AC复制一个复本,大大提高的速。 AcRecordsetAdapter RecordAdp = new AcRecordsetAdapter(mDataset.Tables["雇员档案"]); mac.AddNetAdoData("雇员档案", RecordAdp); // 以上两行也可以直接调用 AcNetUtils 类库里提供的现成方法(效果是一样的): AcNetUtils.DbAdapter.FillDataTableToAC(mDataset.Tables["雇员档案"], mac); 5.可拖动对象设计功能增强 6.支持 条码 Code128 Auto ACReport简介 Anycell Report(简称AC Report)是一款国式报表组件,是国内最早的基于表格,支持图文混排、公式和脚本的国式报表工具之一。就如Anycell Report的名称那样,灵活强大的表格功能一直是AC Report区别于其它软件或控件最显著的特征之一,AC Report 表格取消了传统表格概念“列”的概念,每一行上的单元格数量可以不等,且可以自由活动,勿须上下对齐,在制作复杂的国式报表时可以避免很多不必要的合并拆分操作,制作表格更加方便和随心所欲,并且省时省力。AC Report单元格支持多种丰富的形态,例如格式化文本、图片、图表、条码、OLE容器等。 AC Report的一些基本特点: 1.独具特色的表格,风格与Word表格相似,但可以做出比Word或Excel更灵活的表格来。 2. 功能全面、专业的国式报表设计器,国用户更易于学习和接受。 3.支持多种单元格样式,可以打印图像、图表(直方图、折线图等)、Rich文本、 条形码、式财务帐薄、支持在报表嵌入Word、Excel文档等。 4. 强大的计算和合计功能。内置表达式解析系统和函数库。 5. 可扩充性,可以在应用程序给报表引擎扩充函数库、报表样式和单元格样式。 6.支持多种报表样式,如清单式、分组、交叉表、以及子报表
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值