之前写的导出表格都是导出成Excel,但是接到的项目新需求要求导出成横表类型的Word文本,据了解,POI对word的导出支持略低,之前用的是自己设置本地模板,然后读取到模板后进行数值的获取补充,但是由于博主接到的需求所有的数据都是动态的,所以不可能画个模板然后读取模板导出,因此找到了对导出表单支持良好的iText进行导出,实验效果绝佳,先参考一篇博客写了个小demo,看到导出的是表格,而且是很easy的表格,所以加上自己需要的数据以及代码逻辑就搞定了.废话不多说,首先来看一个简单的IText导出建议表格demo.
首先说下jar包依赖:

  <dependency><groupId>com.lowagie</groupId><artifactId>itext</artifactId><version>2.1.7</version></dependency><dependency><groupId>com.lowagie</groupId><artifactId>iTextAsian</artifactId><version>2.1.7</version></dependency><dependency><groupId>com.lowagie</groupId><artifactId>itext-rtf</artifactId><version>2.1.7</version></dependency>

然后是网上的小demo:

package com.rye.test;
import java.awt.Color;
import java.io.FileNotFoundException;
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.Font;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Table;
import com.lowagie.text.rtf.RtfWriter2;
/**   * 创建word文档 步骤:    * 1,建立文档    * 2,创建一个书写器    * 3,打开文档    * 4,向文档中写入数据    * 5,关闭文档   */   public class WordDemo {    public WordDemo() {    }    /**   * @param args   */   public static void main(String[] args) {    // 创建word文档,并设置纸张的大小  Document document = new Document(PageSize.A4);try {    RtfWriter2.getInstance(document,  new FileOutputStream("E:/word.doc"));document.open();//设置合同头    Paragraph ph = new Paragraph();Font f  = new Font();Paragraph p = new Paragraph("出口合同",   new Font(Font.NORMAL, 18, Font.BOLDITALIC, new Color(0, 0, 0)) );p.setAlignment(1);document.add(p);ph.setFont(f);// 设置中文字体    // BaseFont bfFont =    // BaseFont.createFont("STSongStd-Light",  "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);// Font chinaFont = new Font();/*   * 创建有三列的表格   */   Table table = new Table(4);document.add(new Paragraph("生成表格"));table.setBorderWidth(1);table.setBorderColor(Color.BLACK);table.setPadding(0);table.setSpacing(0);/*   * 添加表头的元素   */   Cell cell = new Cell("表头");//单元格cell.setHeader(true);cell.setColspan(3);//设置表格为三列cell.setRowspan(3);//设置表格为三行table.addCell(cell);table.endHeaders();// 表头结束// 表格的主体    cell = new Cell("Example cell 2");cell.setRowspan(2);//当前单元格占两行,纵向跨度table.addCell(cell);table.addCell("1,1");table.addCell("1,2");table.addCell("1,3");table.addCell("1,4");table.addCell("1,5");table.addCell(new Paragraph("用java生成的表格1"));table.addCell(new Paragraph("用java生成的表格2"));table.addCell(new Paragraph("用java生成的表格3"));table.addCell(new Paragraph("用java生成的表格4"));document.add(new Paragraph("用java生成word文件"));document.add(table);document.close();} catch (FileNotFoundException e) {    e.printStackTrace();} catch (DocumentException e) {    e.printStackTrace();} catch (IOException e) {    e.printStackTrace();}    }    }  

来自:http://blog.csdn.net/liuxiao723846/article/details/38613411
下面是博主自己写的:其中的参数String[] ids,是不同人员的id的数组,String[] field是传入的需要导出的人员熟性,那么接下来—-上代码:

public  void createTable(String[] ids,String[] field,HttpServletResponse response,HttpServletRequest request) {// 创建word文档,并设置纸张的大小Document document;if (field.length<20){document = new Document(PageSize.A4);}else {document = new Document(PageSize.A2);}try {Date date = new Date();/*   try {RtfWriter2.getInstance(document,new FileOutputStream("E:/员工花名册.doc"));} catch (FileNotFoundException e) {e.printStackTrace();}*///测试改变路径String fileName = "员工花名册"+".doc";ServletOutputStream output = response.getOutputStream();response.reset();response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("UTF-8"), "iso-8859-1"));RtfWriter2.getInstance(document,output);document.open();//设置合同头Paragraph ph = new Paragraph();Font f  = new Font();Paragraph p = new Paragraph("员工基本信息",new Font(Font.NORMAL, 18, Font.BOLD, new Color(0, 0, 0)) );p.setAlignment(1);try {document.add(p);} catch (DocumentException e) {e.printStackTrace();}ph.setFont(f);// 设置中文字体// BaseFont bfFont =// BaseFont.createFont("STSongStd-Light",//"UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);// Font chinaFont = new Font();/** 创建有三列的表格*/Table table = new Table(field.length);//table.setWidth((field.length-1)*2);/*document.add(new Paragraph("员工信息"));*/table.setBorderWidth(1);table.setBorderColor(Color.BLACK);table.setPadding(0);table.setSpacing(0);//准备数据List<PersonInfoEntity> personInfoEntityList = new ArrayList<>();//Arrays.sort(charArray);Map<String,Object> map = new HashMap<>();for(int h = 0 ; h<ids.length;h++){map.put("id", ids[ids.length-h-1]);PersonInfoEntity personInfoEntity = personInfoService.selectByMap(map);personInfoEntityList.add(personInfoEntity);}for (int b = 0;b<=personInfoEntityList.size();b++){/*  可以自定义table的列宽Table table2 = new Table(field.length-1);table2.setWidth((field.length-1)*2);添加图片信息*//*document.add(new Paragraph("员工信息"));*//*table2.setBorderWidth(1);table2.setBorderColor(Color.BLACK);table2.setPadding(0);table2.setSpacing(0);*///设置第一行,也就是表头,不涉及行合并列合并,具体的行合并列合并也可以使用rowSpan之类的进行实现if (b==0){for (int a =0;a<field.length;a++){//table.addCell(field[a]);if (field[a].equals("fullName")||field[a]=="fullName"){table.addCell("姓名");}else if (field[a].equals("beforeName")||field[a]=="beforeName"){table.addCell("曾用名");}else if (field[a].equals("idNumber")||field[a]=="idNumber"){table.addCell("身份证号");}else if (field[a].equals("birthplace")||field[a]=="birthplace"){table.addCell("生日");}else if (field[a].equals("age")||field[a]=="age"){table.addCell("年龄");}else if (field[a].equals("jobNo")||field[a]=="jobNo"){table.addCell("工号");}else if (field[a].equals("deptId")||field[a]=="deptId"){table.addCell("部门");}else if (field[a].equals("nation")||field[a]=="nation"){table.addCell("民族");}else{//由于条目过多:50个字段,所以此处进行省略table.addCell("暂无title");}}}else {//设置接下来的数据,也就是真实的人员信息数据for (int a = 0;a<field.length;a++){//row1.setRowStyle(style);if (field[a].equals("fullName")||field[a]=="fullName"){table.addCell(personInfoEntityList.get(b-1).getFullName());}else if (field[a].equals("beforeName")||field[a]=="beforeName"){table.addCell(personInfoEntityList.get(b-1).getBeforeName()==null?"":personInfoEntityList.get(b-1).getBeforeName());}else if (field[a].equals("idNumber")||field[a]=="idNumber"){table.addCell(personInfoEntityList.get(b-1).getIdNumber()==null?"":personInfoEntityList.get(b-1).getIdNumber());}else if (field[a].equals("birthplace")||field[a]=="birthplace"){table.addCell(personInfoEntityList.get(b-1).getBirthday()==null?"":personInfoEntityList.get(b-1).getBirthday());}else if (field[a].equals("age")||field[a]=="age"){String age = "";if (personInfoEntityList.get(b-1).getAge()!=null){age = personInfoEntityList.get(b-1).getAge().toString();}table.addCell(age);}else if (field[a].equals("jobNo")||field[a]=="jobNo"){table.addCell(personInfoEntityList.get(b-1).getJobNo()==null?"":personInfoEntityList.get(b-1).getJobNo());}else if (field[a].equals("deptId")||field[a]=="deptId"){String deptName = "";...table.addCell(deptName);}else if (field[a].equals("nation")||field[a]=="nation"){//枚举String nationName = "";if (personInfoEntityList.get(b-1).getNation()!=null&&personInfoEntityList.get(b-1).getNation()!=""){nationName = NationEnum.getName(Integer.parseInt(personInfoEntityList.get(b-1).getNation()));}table.addCell(nationName);}else{//由于条目过多:50个字段,所以此处进行省略table.addCell("暂无title");}}}}/* document.add(new Paragraph("用java生成word文件"));document.add(new Paragraph("这是我自己添加的一行,我最后要的是动态的"));*/document.add(table);document.close();} catch (DocumentException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}

值得一提的是:

String fileName = "员工花名册"+".doc";ServletOutputStream output = response.getOutputStream();response.reset();response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("UTF-8"), "iso-8859-1"));RtfWriter2.getInstance(document,output);document.open();

RtfWriter2.getInstance(document,
output);getInstance中的流可以是fileOutPutstream也可以是ServletOurPutPtream,开始时想着可不可以转换下,未果,所以看下源码:

 public static RtfWriter2 getInstance(Document var0, OutputStream var1) {return new RtfWriter2(var0, var1);}

发现想着转换着实可笑,也是跳进demo的框子里了.

java IText 导出word表格相关推荐

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

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

  2. Java导出word表格|poi-tl

    目标 多级表头.分页.动态数据 实现 依赖: <!-- poi工具类--><dependency><groupId>com.deepoove</groupId ...

  3. 【Java实现导出Word文档功能 XDocReport +FreeMarker】

    Java实现导出Word文档功能(XDocReport +FreeMarker) 前言 在日常的开发工作中,我们时常会遇到导出Word文档报表的需求,比如公司的财务报表.医院的患者统计报表.电商平台的 ...

  4. Java poi导出word文件

    Java在导出word文件时主要对表格中内容垂直居中处理做以记录方便后续碰到类似问题解决. maven pom.xml中添加poi依赖 <!-- word.excel工具 --> < ...

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

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

  6. java 中导出word后压缩文件_Java批量导出word压缩后的zip文件案例

    一.js代码,由于参数比较大所以利用form表单使用post导出 function export_word(){ var selectedRows = $("#dg").datag ...

  7. java poi导出Excel表格超大数据量解决方案

    Java实现导出excel表格功能,大部分都会使用apache poi,apache poi API 地址 POI之前的版本不支持大数据量处理,如果数据过多则经常报OOM错误,有时候调整JVM大小效果 ...

  8. java 导入导出excel表格

    java 导入导出excel表格 业务上有需求上传excel表格并读取内容,本文记录一下该方法 表格导入 引入相应的工具包 <dependency><groupId>cn.af ...

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

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

最新文章

  1. 自学python网站推荐-推荐自学python必入的神仙网站
  2. linux查看进程相关命令
  3. 1003. [ZJOI2006]物流运输【区间DP+最短路】
  4. [MATLAB学习笔记]sprintf将数据格式化为字符串或字符向量
  5. mysql tags_mysql tags table解决方法
  6. Python递归调用
  7. 深度学习之基于Tensorflow2.0实现Xception网络
  8. word怎么改一张纸的方向_折纸手工DIY,纸碗怎么折?一张纸就搞定,折法简单,宝宝也能折...
  9. 团队作业2 需求分析与原型设计
  10. cocos2d-x-3.x 场景(3)场景切换特效
  11. Mysql提权之反弹shell
  12. 如何下载电驴网站Verycd上的资源
  13. Jenkins下载安装
  14. windows中docker 安装和使用
  15. 华为云会议,基于云计算的远程会议
  16. SCI论文攻略---完整版!!!!
  17. DC学习(时序分析和命令)
  18. CCL: Cross-modal Correlation Learning With Multigrained Fusion by Hierarchical Network 论文笔记
  19. 随机过程的概念与基本类型
  20. Postman任务栏图标丢失

热门文章

  1. Android图表库MPAndroidChart(四)——条形图的绘制过程过程,隐隐约约我看到了套路
  2. 电脑使用技巧(持续更新)
  3. [大学物理实验-6]单摆周期测量
  4. access 微软以外 编辑_Microsoft Office Access用法
  5. E-UTRA名词解释
  6. ssd处理灰度图_ECCV 引用量最高的10篇论文!SSD登顶!何恺明ResNet改进版位居第二...
  7. android usb 检测工具,Android:如何检测已连接的USB设备?
  8. 神仙道装备材料及掉落地点大全
  9. 如何调整uniapp轮播图swiper的样式(dot的样式和位置)
  10. 23-职位分类展示平台响应式网页模板{HTML JS CSS)