利用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,如需转载请自行联系原作者
目录
相关文章
|
缓存 Linux Windows
flyingsaucer进行html文件转图片和pdf
目录 一、前言 二、html转图片 1、添加依赖 2、代码示例 (1)测试html文件 (2)代码示例 3、演示结果 三、html转pdf 1、添加依赖 2、代码示例 3、演示结果 四、注意点 1、html转图片的源url 2、部署到linux上后中文乱码 五、Linux上安装字体 1、拷贝字体 2、赋予权限 3、建立字体缓存 4、查看安装的字体
flyingsaucer进行html文件转图片和pdf
|
JavaScript 前端开发 容器
Vue3 实现一个自定义toast(小弹窗)(二)
Vue3 实现一个自定义toast(小弹窗)
Vue3 实现一个自定义toast(小弹窗)(二)
|
消息中间件 监控 RocketMQ
Docker部署RocketMQ5.2.0集群
本文详细介绍了如何使用Docker和Docker Compose部署RocketMQ 5.2.0集群。通过创建配置文件、启动集群和验证容器状态,您可以快速搭建起一个RocketMQ集群环境。希望本文能够帮助您更好地理解和应用RocketMQ,提高消息中间件的部署和管理效率。
2100 91
|
NoSQL Java 数据库连接
实战|StarRocks 通过 JDBC Catalog 访问 MongoDB 的数据
本文章介绍如何通过 StarRocks 的 JDBC Catalog 功能,结合 MongoDB BI Connector,将 MongoDB 数据便捷接入 StarRocks,实现数据打通和 SQL 查询分析,以下是整体流程图。
|
Java 应用服务中间件 HSF
Java应用结构规范问题之配置Logback以在控制台输出日志的问题如何解决
Java应用结构规范问题之配置Logback以在控制台输出日志的问题如何解决
483 7
|
消息中间件 存储 运维
2024最全RabbitMQ集群方案汇总
本文梳理了RabbitMQ集群的几种方案,主要包括普通集群、镜像集群(高可用)、Quorum队列(仲裁队列)、Streams集群模式(高可用+负载均衡)和插件方式。重点介绍了每种方案的特点、优缺点及适用场景。搭建步骤包括安装Erlang和RabbitMQ、配置集群节点、修改hosts文件、配置Erlang Cookie、启动独立节点并创建集群,以及配置镜像队列以提高可用性和容错性。推荐使用Quorum队列与Streams模式,其中Quorum队列适合高可用集群,Streams模式则同时支持高可用和负载均衡。此外,还有Shovel和Federation插件可用于特定场景下的集群搭建。
3720 3
|
Java BI API
SpringBoot + POI-TL:高效生成Word报表的技术盛宴
【8月更文挑战第22天】在日常的工作与学习中,文档处理特别是Word报表的自动生成,是许多项目中不可或缺的一环。传统的手工编辑Word文档不仅效率低下,还容易出错,特别是在需要批量生成包含动态数据的报告时,更是令人头疼不已。幸运的是,结合Spring Boot的简洁高效与POI-TL的强大功能,我们能够轻松实现Word报表的快速生成,既提升了工作效率,又保证了数据的准确性和报表的美观性。
1916 0
|
JavaScript
echarts图表之间的切换
echarts图表之间的切换
394 0
|
JSON Java 数据格式
SpringBoot 如何进行业务校验,老鸟们都这么玩的!
SpringBoot 如何进行业务校验,老鸟们都这么玩的!
572 0
|
API C语言 开发者
【精选】太阳系八大行星运转轨迹程序,C语言,源代码分享
太阳系行星运行轨道图,C语言,源代码分享
735 0
【精选】太阳系八大行星运转轨迹程序,C语言,源代码分享