在实际的项目开发中我们需要将后台大量数据导出为word或者是excel方便用户操作,当然能完成这一功能的有freemarker,itext,poi等技术,本文讲述以itext导出word。
首先我们需要明白的是无论是freemarker,itext,poi都是先做好模板或者是先画出模板然后在其中填充内容,那么有了这种思想,就能做好这一功能。
开发必须的三个架包:
下面我们直接上代码:
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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
|
package
com.csg.action;
import
java.awt.Color;
import
java.io.FileOutputStream;
import
java.io.IOException;
import
com.lowagie.text.Cell;
import
com.lowagie.text.Document;
import
com.lowagie.text.DocumentException;
import
com.lowagie.text.Element;
import
com.lowagie.text.Font;
import
com.lowagie.text.Image;
import
com.lowagie.text.PageSize;
import
com.lowagie.text.Paragraph;
import
com.lowagie.text.Phrase;
import
com.lowagie.text.Table;
import
com.lowagie.text.pdf.BaseFont;
import
com.lowagie.text.rtf.RtfWriter2;
import
com.lowagie.text.rtf.style.RtfFont;
public
class
WordTest2 {
public
void
createDocContext(String file)
throws
DocumentException,
IOException {
// 设置纸张大小
Document document =
new
Document(PageSize.A4);
// 建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中
RtfWriter2.getInstance(document,
new
FileOutputStream(file));
document.open();
// 设置中文字体
BaseFont bfChinese = BaseFont.createFont(
"STSongStd-Light"
,
"UniGB-UCS2-H"
, BaseFont.NOT_EMBEDDED);
// 标题字体风格
RtfFont titleFont =
new
RtfFont(
"宋体"
,
21
, Font.BOLD, Color.BLACK);
/* Font titleFont = new Font(bfChinese, 21, Font.BOLD); */
// 正文字体风格
Font contextFont = new Font(bfChinese, 12, Font.NORMAL);
Paragraph title = new Paragraph("xx画院艺术品收藏审核表");
// 设置标题格式对齐方式
title.setAlignment(Element.ALIGN_CENTER);
title.setFont(titleFont);
document.add(title);
// 设置 Table 表格
Table aTable = new Table(2);// 设置表格为2列
int width[] = { 4, 96 };// 每列的占比例
aTable.setWidths(width);// 设置每列所占比例
aTable.setWidth(100); // 占页面宽度 100%
aTable.setAlignment(Element.ALIGN_CENTER);// 居中显示
aTable.setAlignment(Element.ALIGN_MIDDLE);// 纵向居中显示
aTable.setAutoFillEmptyCells(true); // 自动填满
aTable.setBorderWidth(1); // 边框宽度
aTable.setBorderColor(Color.BLACK); // 边框颜色
aTable.setPadding(0);// 衬距,看效果就知道什么意思了
aTable.setSpacing(0);// 即单元格之间的间距
aTable.setBorder(1);// 边框
Font fontChinese = new Font(bfChinese, 12, Font.NORMAL, Color.black);
Cell cell = new Cell(new Phrase("艺术品情况说明", fontChinese));
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell.setBorderColor(Color.BLACK);
aTable.addCell(cell);
cell = new Cell(new Phrase("收藏xxx版画作品14张合共6.5万元,从本人手中直接购买。",
fontChinese));
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
aTable.addCell(cell);
cell = new Cell("#5");
aTable.addCell(cell);
cell = new Cell(new Phrase("填表人:_________ 日期:___年___月___日" + " ",
fontChinese));
cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
aTable.addCell(cell);
document.add(aTable);
// 设置Table表格,创建一个10列的表格,后台循环数据
aTable = new Table(10);
aTable.setWidths(new int[] { 4, 10, 20, 10, 20, 10, 20, 10, 20, 6 });
aTable.setWidth(100);
aTable.addCell(new Cell("#1"));
aTable.addCell(new Cell("序号"));
aTable.addCell(new Cell("作品名称"));
aTable.addCell(new Cell("作者"));
aTable.addCell(new Cell("年代"));
aTable.addCell(new Cell("品名"));
aTable.addCell(new Cell("尺寸"));
aTable.addCell(new Cell("件数"));
aTable.addCell(new Cell("收藏金额(不含税)"));
aTable.addCell(new Cell("税收"));
for (int i = 0; i < 10; i++) {
aTable.addCell(new Cell(""));
aTable.addCell(new Cell("第" + (i + 1) + "件"));
aTable.addCell(new Cell("1234"));
aTable.addCell(new Cell("1234"));
aTable.addCell(new Cell("123"));
aTable.addCell(new Cell("123"));
aTable.addCell(new Cell("123"));
aTable.addCell(new Cell("123"));
aTable.addCell(new Cell("123"));
aTable.addCell(new Cell("123"));
}
;
document.add(aTable);
aTable = new Table(2);// 设置表格为2列
aTable.setWidths(new int[] { 5, 95 });// 设置每列所占比例
aTable.setWidth(100); // 占页面宽度 100%
cell = new Cell(new Phrase("征集小组组员执行征集情况说明", fontChinese));
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell.setBorderColor(Color.BLACK);
aTable.addCell(cell);
cell = new Cell(
new Phrase(
"志强、学灵经手向xxx征集版画作品14张,合共6.5万元,具体明细如上。经综合分析,这14件作品建议列入“藏品”收藏,发收藏证书。当否,请审核",
fontChinese));
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
aTable.addCell(cell);
cell = new Cell(new Phrase("征集小组组员签名", fontChinese));
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell.setRowspan(8);// 合并行
aTable.addCell(cell);
cell = new Cell(new Phrase("", fontChinese));
cell.setRowspan(8);
aTable.addCell(cell);
cell = new Cell(new Phrase("征集小组副组长审核", fontChinese));
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell.setRowspan(9);
aTable.addCell(cell);
cell = new Cell(new Phrase("", fontChinese));
cell.setRowspan(9);
aTable.addCell(cell);
cell = new Cell(new Phrase("征集小组组长审核", fontChinese));
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell.setRowspan(8);
aTable.addCell(cell);
cell = new Cell(new Phrase("", fontChinese));
cell.setRowspan(8);
aTable.addCell(cell);
cell = new Cell(new Phrase("艺术委员会意见", fontChinese));
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell.setRowspan(8);
aTable.addCell(cell);
cell = new Cell(new Phrase("", fontChinese));
cell.setRowspan(8);
aTable.addCell(cell);
document.add(aTable);
// 设置5个表格 循环5次
for (int i = 0; i < 5; i++) {
// 打印图像
aTable = new Table(2);// 设置表格为2列3行
aTable.setWidths(new int[] { 50, 50 });// 设置每列所占比例
aTable.setWidth(100); // 占页面宽度 100%
// 添加图像1
cell = new Cell();
cell.setBorderWidth(0);// 边框线设为0
Image img = Image.getInstance("d:/201305.jpg");
img.setAbsolutePosition(0, 0);
img.scaleAbsolute(12, 35);// 直接设定显示尺寸
img.scalePercent(50);// 表示显示的大小为原尺寸的50%
img.scalePercent(25, 50);// 图像高宽的显示比例
img.setRotation(30);// 图像旋转一定角度
cell.add(img);
aTable.addCell(cell);
// 添加图像2
cell = new Cell();
cell.setBorderWidth(0);
cell.setVerticalAlignment(Element.ALIGN_RIGHT);
img.setAlignment(Image.RIGHT);// 设置图片显示位置
img = Image.getInstance("d:/201307.jpg");
/*
* img.scaleAbsolute(12,50);//直接设定显示尺寸
*/
img.scalePercent(
50
);
// 表示显示的大小为原尺寸的50%
img.scalePercent(
25
,
50
);
// 图像高宽的显示比例
img.setRotation(
30
);
// 图像旋转一定角度
cell.add(img);
aTable.addCell(cell);
// 信息
cell =
new
Cell(
new
Phrase(
"作品1:《文明符号迴响》"
, fontChinese));
cell.setBorderWidth(
0
);
aTable.addCell(cell);
cell =
new
Cell(
new
Phrase(
"作品2:《石语之一》"
, fontChinese));
cell.setBorderWidth(
0
);
aTable.addCell(cell);
cell =
new
Cell(
new
Phrase(
"落款:23/25 文明符号迴响 xxx 2009"
, fontChinese));
cell.setBorderWidth(
0
);
aTable.addCell(cell);
cell =
new
Cell(
new
Phrase(
"落款:7/15石语之一 石版画 xxx 2011"
, fontChinese));
cell.setBorderWidth(
0
);
aTable.addCell(cell);
document.add(aTable);
}
document.add(
new
Paragraph(
"\n"
+
"\n"
));
title =
new
Paragraph(
"作者简介"
);
// 设置标题格式对齐方式
title.setAlignment(Element.ALIGN_CENTER);
titleFont =
new
RtfFont(
"宋体"
,
16
, Font.BOLD, Color.BLACK);
title.setFont(titleFont);
title.setSpacingAfter(
10
);
document.add(title);
// 正文
String contextString =
"xxx1969-年生于北京南靖,籍贯广东潮州。1996年毕业于广州美术学院版画系并留校工作, 现为广州美术学院版画系副教授,山西大学客座教授;中国美术家协会会员,中国美术家协会藏书票研究会常务副主席,广东青年画院画家。"
+
"多件作品入选全国美展、全国版画展、国际版画展等学术展。曾获第九届全国美术作品展优秀奖、当代中国青年作品展二等奖、国务院庆祝澳门回归祖国宣传招贴画十佳作品奖、全军廉政文化优秀作品展二等奖、广东省美术作品展铜奖、广东版画奖等学术奖项。"
+
" \n"
// 换行
+
"作品、论文发表于《美术》、《美术观察》、《中国版画》、《美术学报》、《北方美术》等学术刊物。出版教材《石版画》、《版画》(合著)等 ;出版作品集《中锐xxx作品集》;入编《中国美术大事记》、《当代中国艺术》、《中国当代中青年版画家石版画精品集》等。"
+
" \n"
// 换行
+
"作品被广东美术馆、神州版画博物馆、中华世纪坛、绍兴鲁迅纪念馆、观澜美术馆、汕头博物馆、广州美术学院、伊斯坦布尔国际版画馆等学术机构及个人收藏。"
;
Paragraph context =
new
Paragraph(contextString);
// 正文格式左对齐
context.setAlignment(Element.ALIGN_LEFT);
context.setFont(contextFont);
// 离上一段落(标题)空的行数
context.setSpacingBefore(
10
);
// 设置第一行空的列数
context.setFirstLineIndent(
20
);
document.add(context);
document.close();
}
public
static
void
main(String[] args) {
WordTest2 b =
new
WordTest2();
try
{
b.createDocContext(
"d:/demo.doc"
);
System.out.println(
"导出成功"
);
}
catch
(DocumentException e) {
e.printStackTrace();
}
catch
(IOException e) {
e.printStackTrace();
}
}
}
|
本文示例图片请直接拷贝到 D:盘!
本文以测试为主,实战本代码只做参考。匆忙之作,欢迎指正!
本文转自 小夜的传说 51CTO博客,原文链接:http://blog.51cto.com/1936625305/1352558,如需转载请自行联系原作者