在实际的项目开发中我们需要将后台大量数据导出为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(2550);// 图像高宽的显示比例
            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,如需转载请自行联系原作者

利用itext导出word表格,处理图片相关推荐

  1. java IText 导出word表格

    之前写的导出表格都是导出成Excel,但是接到的项目新需求要求导出成横表类型的Word文本,据了解,POI对word的导出支持略低,之前用的是自己设置本地模板,然后读取到模板后进行数值的获取补充,但是 ...

  2. Java中利用freemarker导出word表格并合并单元格

    1.word表格的模板 另存为xml格式: 将保存的xml改成.ftl 格式化一下xml,看看文件中的带有${}是否正确 如果出现这种情况,手动修改下(可复制上一个正确的改下名字) 2.Java代码 ...

  3. Struts2利用iText导出word文档(包含表格)

    struts.xml里的配置如下: <!-- 保存为word文件 --><action name="studentCurriculumWord" class=&q ...

  4. java导出word表格_使用PowerDesigner16.5 逆向数据库 导出word文档

    在上一篇<使用PowerDesigner16.5 逆向数据库生产表结构或导出word文档二>中,我们学会了使用PowerDesigner16.5怎么连接数据库,逆向生成表结构.有时候,我们 ...

  5. Java之利用FreeMarker导出Word实例

    开心一笑 感冒了很难受,她闷在被窝里给男朋友发短信"我感冒了-"并决定如果对方回答"多喝点水"就一脚踹了他.过一会儿手机振动起来,短信内容:"开门."--这个大笨蛋!谁让他来的啦!她起身用最快的速度冲 ...

  6. java 如何将word 转换为ftl_Java之利用FreeMarker导出Word实例

    开心一笑 感冒了很难受,她闷在被窝里给男朋友发短信"我感冒了..."并决定如果对方回答"多喝点水"就一脚踹了他.过一会儿手机振动起来,短信内容:"开门."......这个大笨蛋!谁让他来的啦!她起身用 ...

  7. PowerDesiger 15逆向生成工程E-R图及导出word表格

    应用环境:win8(64位)+oracle10g(32位)服务端+PowerDesigner15 需求:oracle数据库中的表结构是web工程框架hibernate 自动生成,现需要将数据库中已有的 ...

  8. NPOI导出word,NPOI导出word表格,NPOI复制table表格 XWPFDocument中XWPFTable

    NPOI导出word,NPOI导出word表格,NPOI复制table表格 XWPFDocument中XWPFTable 使用NPOI可以对Word中的文本做替换,当遇到表格时,单个表格也可以循环遍历 ...

  9. POI导出word表格 office打开没问题 wps打开列有问题

    POI导出word表格 office打开没问题 wps打开列有问题 模板样式 导出文档office打开 wps打开文件 1.给表格设置宽,指定宽度 2.将布局固定 3.动态设置单元格的宽度 4.重点设 ...

最新文章

  1. 计算机中丢失sense3.dll,sense3.dll
  2. python:sort,sorted,argsort,lexsort
  3. tensor转list_tensorflow中ckpt转pb
  4. 移动端点击屏幕按钮闪现的灰色底框
  5. MapServer WinForm开发成功
  6. 利萨茹(Lissajous)曲线动画演示
  7. 合同在项目管理中的优势
  8. 如何配置企业微信开发者
  9. EPMS- 让企业应用更加轻便!
  10. 弃用server酱 自建个人消息推送
  11. 通过高德api获取经纬度
  12. 【DG】DG日常维护
  13. 测风塔选址与代表性问题
  14. 微信群如何实现只接收红包消息提醒
  15. 7.23洪资内参(更新中)
  16. zigbee定位的概念
  17. 非图形化流程定义部件的要素
  18. 烤仔说 | 两分钟制作属于你自己的 NFT(内附创作教程)
  19. 睿智的目标检测61——Pytorch搭建YoloV7目标检测平台
  20. C++计时器使用(WIN10系统)

热门文章

  1. 在Excel中查找/替换时使用换行符
  2. OpenGL导入3DS专题
  3. PHP根据生日计算年龄(周岁)
  4. 本人重装后的一些操作需求
  5. Go语言圣经 - 第3章 基础数据类型
  6. codeforces 581B Luxurious Houses(线段树点更新,区间查询)
  7. zcmu --1919(多重背包)
  8. 基于寒武纪CNCodec 做视频编解码遇到的一些问题
  9. php公众号开发配置网页域名,微信公众号网页开发授权配置流程
  10. Gerrit代码审计系统实战-Gerrit 2.15.14版本快速搭建