首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
其他好文
> 详细
iText5报表__表格处理
时间:
2015-01-14 16:53:22
阅读:
321
评论:
0
收藏:
0
[点我收藏+]
标签:
itext
字体
1.概述
对于比较简单的表格处理可以用Table,但是如果要处理复杂的表格,这就需要PDFPTable进行处理。
建立表格之后,可以设定表格的属性,如:边框宽度、边框颜色、衬距(padding space 即单元格之间的间距)大小等属性。下面通过一个简单的例子说明如何使用表格,代码如下:
2.表格的操作
2.1 表格的初始化
你可以用3种不同的方法创建PdfTable:
PdfPTable(float[] relativeWidths);
PdfPTable(int numColumns);
PdfPTable(PdfPTable table);
举例:
// 创建一个有3列的表格
PdfPTable table = new PdfPTable(3);
2.2 表格的宽度
和高度
设置表格的宽度有两种方法,分别如下
table.setTotalWidth(float totalWidth);
//设置表格的总宽度
table.setTotalWidth(float[] columnWidth);
//设置表格的各列宽度
使用以上两个函数,必须使用以下函数,将宽度锁定。
table.setLockedWidth(true);
设置行的高度
cell.setMinimumHeight(60);
代码举例
PdfPTable table = new PdfPTable(3);
table
.
setTotalWidth
(
300
)
;
table
.
setLockedWidth
(
true
)
;
table
.
setTotalWidth
(
new
float
[
]
{
144
,
72
,
72
}
)
;
table
.
setLockedWidth
(
true
)
;
2.3 添加单元格
把下面这9项顺次的加入到表格中,当一行充满时候自动折行到下一行
PdfPTable table = new PdfPTable(3);
table.addCell("1.1");
table.addCell("1.2");
table.addCell("1.3");
table.addCell("2.1");
table.addCell("2.2");
table.addCell("2.3");
以上程序运行结果将显示三行二列的表格。
添加单元格的内容还可以是以下几种形式。
public void addCell(PdfPCell cell);
public void addCell(PdfPTable table);
public void addCell(Phrase phrase);
public void addCell(String text);
2.3 合并单元格
iText合并单元格的过程如下,首先创建一个cell,设置这个单元格的跨度,
如果是横向合并,则通过
cell.setColspan(n); //n代表从当前单元格的位置开始,合并的单元格数
如果是纵向合并,
cell.setRowspan(n);//n代表从当前单元格的位置开始,合并的单元格数
代码举例
//创建一个有3列的表格
PdfPTable
table
=
new
PdfPTable
(
3
)
;
// 定义一个表格单元
PdfPCell cell
=
new
PdfPCell
(
new
Paragraph
(
"header with colspan 3"
)
)
;
// 定义一个表格单元的跨度
cell
.
setColspan
(
3
)
;
// 把单元加到表格中
table
.
addCell
(
cell
)
;
以上代码建立一个表格,具有一行,一行本来有3列,结果经过合并,只有1列。
代码举例
import
java
.
io
.
FileOutputStream
;
import
java
.
io
.
IOException
;
import
com
.
itextpdf
.
text
.
Document
;
import
com
.
itextpdf
.
text
.
DocumentException
;
import
com
.
itextpdf
.
text
.
Phrase
;
import
com
.
itextpdf
.
text
.
Rectangle
;
import
com
.
itextpdf
.
text
.
pdf
.
PdfPCell
;
import
com
.
itextpdf
.
text
.
pdf
.
PdfPTable
;
import
com
.
itextpdf
.
text
.
pdf
.
PdfWriter
;
public
class
TableDemo2
{
public
static
final
String
RESULT
=
"c:\\TableDemo2.pdf"
;
public
static
void
createPdf
(
String
filename
)
throws
IOException
,
DocumentException
{
// step 1
Document
document
=
new
Document
(
)
;
// step 2
PdfWriter
.
getInstance
(
document
,
new
FileOutputStream
(
filename
)
)
;
// step 3
document
.
open
(
)
;
// step 4
PdfPTable
table
=
createTable1
(
)
;
document
.
add
(
table
)
;
table
=
createTable2
(
)
;
table
.
setSpacingBefore
(
5
)
;
table
.
setSpacingAfter
(
5
)
;
document
.
add
(
table
)
;
table
=
createTable3
(
)
;
document
.
add
(
table
)
;
table
=
createTable4
(
)
;
table
.
setSpacingBefore
(
5
)
;
table
.
setSpacingAfter
(
5
)
;
document
.
add
(
table
)
;
table
=
createTable5
(
)
;
document
.
add
(
table
)
;
// step 5
document
.
close
(
)
;
}
/**setWidths()函数举例*/
public
static
PdfPTable createTable1
(
)
throws
DocumentException
{
PdfPTable
table
=
new
PdfPTable
(
3
)
;
table
.
setWidthPercentage
(
288
/
5
.
23f
)
;
table
.
setWidths
(
new
int
[
]
{
2
,
1
,
1
}
)
;
PdfPCell cell
;
cell
=
new
PdfPCell
(
new
Phrase
(
"Table 1"
)
)
;
cell
.
setColspan
(
3
)
;
table
.
addCell
(
cell
)
;
cell
=
new
PdfPCell
(
new
Phrase
(
"Cell with rowspan 2"
)
)
;
cell
.
setRowspan
(
2
)
;
table
.
addCell
(
cell
)
;
table
.
addCell
(
"row 1; cell 1"
)
;
table
.
addCell
(
"row 1; cell 2"
)
;
table
.
addCell
(
"row 2; cell 1"
)
;
table
.
addCell
(
"row 2; cell 2"
)
;
return
table
;
}
/**setWidths()函数举例*/
public
static
PdfPTable createTable2
(
)
throws
DocumentException
{
PdfPTable
table
=
new
PdfPTable
(
3
)
;
table
.
setTotalWidth
(
288
)
;
table
.
setLockedWidth
(
true
)
;
table
.
setWidths
(
new
float
[
]
{
2
,
1
,
1
}
)
;
PdfPCell cell
;
cell
=
new
PdfPCell
(
new
Phrase
(
"Table 2"
)
)
;
cell
.
setColspan
(
3
)
;
table
.
addCell
(
cell
)
;
cell
=
new
PdfPCell
(
new
Phrase
(
"Cell with rowspan 2"
)
)
;
cell
.
setRowspan
(
2
)
;
table
.
addCell
(
cell
)
;
table
.
addCell
(
"row 1; cell 1"
)
;
table
.
addCell
(
"row 1; cell 2"
)
;
table
.
addCell
(
"row 2; cell 1"
)
;
table
.
addCell
(
"row 2; cell 2"
)
;
return
table
;
}
/**合并单元格setColspan()函数举例*/
public
static
PdfPTable createTable3
(
)
throws
DocumentException
{
PdfPTable
table
=
new
PdfPTable
(
new
float
[
]
{
2
,
1
,
1
}
)
;
table
.
setWidthPercentage
(
85f
)
;
PdfPCell cell
;
cell
=
new
PdfPCell
(
new
Phrase
(
"Table 3"
)
)
;
cell
.
setColspan
(
3
)
;
table
.
addCell
(
cell
)
;
cell
=
new
PdfPCell
(
new
Phrase
(
"Cell with rowspan 2"
)
)
;
cell
.
setRowspan
(
2
)
;
table
.
addCell
(
cell
)
;
table
.
addCell
(
"row 1; cell 1"
)
;
table
.
addCell
(
"row 1; cell 2"
)
;
table
.
addCell
(
"row 2; cell 1"
)
;
table
.
addCell
(
"row 2; cell 2"
)
;
return
table
;
}
/**setWidthPercentage()方法举例*/
public
static
PdfPTable createTable4
(
)
throws
DocumentException
{
PdfPTable
table
=
new
PdfPTable
(
3
)
;
Rectangle
rect
=
new
Rectangle
(
523
,
770
)
;
//rect表示PageSize页面的大小,主要用于检测各列宽度之各是否超过边界,如果超过,则按比例重新赋值
table
.
setWidthPercentage
(
new
float
[
]
{
144
,
72
,
72
}
,
rect
)
;
PdfPCell cell
;
cell
=
new
PdfPCell
(
new
Phrase
(
"Table 4"
)
)
;
cell
.
setColspan
(
3
)
;
table
.
addCell
(
cell
)
;
cell
=
new
PdfPCell
(
new
Phrase
(
"Cell with rowspan 2"
)
)
;
cell
.
setRowspan
(
2
)
;
table
.
addCell
(
cell
)
;
table
.
addCell
(
"row 1; cell 1"
)
;
table
.
addCell
(
"row 1; cell 2"
)
;
table
.
addCell
(
"row 2; cell 1"
)
;
table
.
addCell
(
"row 2; cell 2"
)
;
return
table
;
}
/**setTotalWidth()方法举例*/
public
static
PdfPTable createTable5
(
)
throws
DocumentException
{
PdfPTable
table
=
new
PdfPTable
(
3
)
;
table
.
setTotalWidth
(
new
float
[
]
{
144
,
72
,
72
}
)
;
table
.
setLockedWidth
(
true
)
;
PdfPCell cell
;
cell
=
new
PdfPCell
(
new
Phrase
(
"Table 5"
)
)
;
cell
.
setColspan
(
3
)
;
table
.
addCell
(
cell
)
;
cell
=
new
PdfPCell
(
new
Phrase
(
"Cell with rowspan 2"
)
)
;
cell
.
setRowspan
(
2
)
;
table
.
addCell
(
cell
)
;
table
.
addCell
(
"row 1; cell 1"
)
;
table
.
addCell
(
"row 1; cell 2"
)
;
table
.
addCell
(
"row 2; cell 1"
)
;
table
.
addCell
(
"row 2; cell 2"
)
;
return
table
;
}
public
static
void
main
(
String
[
]
args
)
throws
IOException
,
DocumentException
{
TableDemo2
.
createPdf
(
RESULT
)
;
}
}
2.4 表格的嵌套
表格的嵌套是通过将表格作为一个cell添加到上一个表格中来完成的。方法如下
public void addCell(PdfPTable table);
代码举例
/**表格嵌套举例*/
public
static
PdfPTable createTable6
(
)
throws
DocumentException
{
PdfPTable
table
=
new
PdfPTable
(
3
)
;
table
.
setTotalWidth
(
new
float
[
]
{
144
,
72
,
72
}
)
;
table
.
setLockedWidth
(
true
)
;
PdfPCell cell
;
cell
=
new
PdfPCell
(
new
Phrase
(
"Table 5"
)
)
;
cell
.
setColspan
(
3
)
;
cell
.
setBorderWidth
(
0
)
;
//设置表格的边框宽度为0
table
.
addCell
(
cell
)
;
//加入嵌套表格
PdfPTable celltable
=
new
PdfPTable
(
2
)
;
celltable
.
addCell
(
"qiantao11"
)
;
celltable
.
addCell
(
"qiantao12"
)
;
cell
=
new
PdfPCell
(
celltable
)
;
cell
.
setRowspan
(
2
)
;
cell
.
setBorderWidth
(
1
)
;
//设置表格的边框宽度为1
cell
.
setPadding
(
10
)
;
//设置表格与上一个表格的填充为10
table
.
addCell
(
cell
)
;
table
.
addCell
(
"row 1; cell 1"
)
;
table
.
addCell
(
"row 1; cell 2"
)
;
table
.
addCell
(
"row 2; cell 1"
)
;
table
.
addCell
(
"row 2; cell 2"
)
;
return
table
;
}
2.5 设置表格的边框
边框的线必须通过以下代码来完成
cell.setBorderWidth(borderwidth)
cell.setBorderWidthBottom(borderwidth)
cell.setBorderWidthTop(borderwidth)
cell.setBorderWidthBottom(borderwidth)
cell.setBorderWidthRight(borderwidth)
cell.setBorderWidthLeft(borderwidth)
嵌套时如果想在两个表格之间留一定的间隔,可以通过以下方法来完成
cell.setPadding(padding);
cell.setPaddingBottom(padding);
cell.setPaddingTop(padding);
cell.setPaddingRight(padding);
cell.setPaddingLeft(padding);
代码举例如下
/**setTotalWidth(),隐藏边框线举例*/
public
static
PdfPTable createTable5
(
)
throws
DocumentException
{
PdfPTable
table
=
new
PdfPTable
(
3
)
;
table
.
setTotalWidth
(
new
float
[
]
{
144
,
72
,
72
}
)
;
table
.
setLockedWidth
(
true
)
;
PdfPCell cell
;
cell
=
new
PdfPCell
(
new
Phrase
(
"Table 5"
)
)
;
cell
.
setColspan
(
3
)
;
cell
.
setBorderWidth
(
0
)
;
table
.
addCell
(
cell
)
;
cell
=
new
PdfPCell
(
new
Phrase
(
"Cell with rowspan 2"
)
)
;
cell
.
setRowspan
(
2
)
;
table
.
addCell
(
cell
)
;
table
.
addCell
(
"row 1; cell 1"
)
;
table
.
addCell
(
"row 1; cell 2"
)
;
table
.
addCell
(
"row 2; cell 1"
)
;
table
.
addCell
(
"row 2; cell 2"
)
;
return
table
;
}
2.6 定义边框的颜色
// 定义单元格的框颜色
cell.setBorderColor(new BaseColor(255, 0, 0));
// 定义单元格的背景颜色
cell.setBackgroundColor(new BaseColor(0xC0, 0xC0, 0xC0));
参考文献
1.解决itext生成嵌套PdfPtable时,格式,字体方面的一些问题. http://blog.csdn.net/flyfeifei66/article/details/6730139
2.iText 绘制表格的诸多缺陷. http://www.iteye.com/topic/178465
iText5报表__表格处理
标签:
itext
字体
原文地址:http://blog.csdn.net/scholar_man/article/details/42711217
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
分布式事务
2021-07-29
OpenStack云平台命令行登录账户
2021-07-29
getLastRowNum()与getLastCellNum()/getPhysicalNumberOfRows()与getPhysicalNumberOfCells()
2021-07-29
【K8s概念】CSI 卷克隆
2021-07-29
vue3.0使用ant-design-vue进行按需加载原来这么简单
2021-07-29
stack栈
2021-07-29
抽奖动画 - 大转盘抽奖
2021-07-29
PPT写作技巧
2021-07-29
003-核心技术-IO模型-NIO-基于NIO群聊示例
2021-07-29
Bootstrap组件2
2021-07-29
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!