利用itext导出word表格,处理图片

简介:

    在实际的项目开发中我们需要将后台大量数据导出为word或者是excel方便用户操作,当然能完成这一功能的有freemarker,itext,poi等技术,本文讲述以itext导出word。

   首先我们需要明白的是无论是freemarker,itext,poi都是先做好模板或者是先画出模板然后在其中填充内容,那么有了这种思想,就能做好这一功能。


    开发必须的三个架包:

wKiom1LY2vvANViGAACZHD5WK4M639.jpg





下面我们直接上代码:

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:盘!

本文以测试为主,实战本代码只做参考。匆忙之作,欢迎指正!

   源码下载地址:http://down.51cto.com/data/1071741










本文转自 小夜的传说 51CTO博客,原文链接:http://blog.51cto.com/1936625305/1352558,如需转载请自行联系原作者
目录
相关文章
|
前端开发
前端如何支持PDF、Excel、Word在线预览 #42
前端如何支持PDF、Excel、Word在线预览 #42
620 0
|
6月前
|
Java
itext制作pdf表格
java中使用itext制作pdf表格
利用Spire实现对Word模板的指定文字替换(文字、图片、表格)
利用Spire实现对Word模板的指定文字替换(文字、图片、表格)
184 0
|
前端开发 JavaScript
前端实现文件预览(pdf、excel、word、图片)
前端实现文件预览(pdf、excel、word、图片)
363 0
poi往word单元格插入图片,支持本地图片和网络图片
最近word导出时需要导出图片,在网上翻了会就发现了好心人分享的代码,但是只支持本地文件读取,我们项目需要从其他服务器获取图片,那肯定得使用网络方式了,于是在源代码上进行了完善,可接收本地和网络两种url方式。
615 1
|
文字识别
解析pdf图片格式的表格到excel表格
解析pdf图片格式的表格到excel表格,原理是把pdf转换成图片,根据直方图定位表格单元格线条位置,按照单元格切分原始pdf,按顺序ocr单元格内容,最终拼接成完整excel
170 1
|
Java Maven
使用EasyPOI导出复杂的Word表格
使用EasyPOI导出复杂的Word表格
3515 0
使用EasyPOI导出复杂的Word表格
|
Linux Windows
aspose将word转pdf时乱码,或者出现小方框问题
aspose将word转pdf时乱码,或者出现小方框问题
1125 0
aspose将word转pdf时乱码,或者出现小方框问题
|
Java 数据安全/隐私保护
导出文件:使用itext导出数据为PDF并添加文字与图片水印
导出文件:使用itext导出数据为PDF并添加文字与图片水印
831 0
导出文件:使用itext导出数据为PDF并添加文字与图片水印
POI Word导入图片
POI3.17版本之后有调整,getPackageRelationship()已经过时,所以有了新的替代。