POI 完整实现打印。

 

 

 

最近写代码真恶心,不能说是恶心应该说是现在开始写的代码越来越像底层靠近了,越来越像真实的功能上实现了。

昨天晚上开始做打印的效果。

想做出打印不难,难的是控制格式,居中啊,加粗,字体大小,乱七八糟的东西,这个POI 虽然用OO方式做了导出

到Excel但是呢有很多废弃的方法,而且有的还不好使。。很闹心啊~!

下面介绍一下POI和我的一个例子。

一.POI简介

Jakarta POI 是apache的子项目,目标是处理ole2对象。它提供了一组操纵Windows文档的Java API

目前比较成熟的是HSSF接口,处理MS Excel(97-2002)对象。它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西,而是真正的Excel对象,你可以控制一些属性如sheet,cell等等。


二.HSSF概况

HSSF 是Horrible SpreadSheet Format的缩写,也即“讨厌的电子表格格式”。 也许HSSF的名字有点滑稽,就本质而言它是一个非常严肃、正规的API。通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。

HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。前者很好理解,后者比较抽象,但操作效率要高得多。


三.开始编码


1 . 准备工作

要求:JDK 1.4+POI开发包
可以到 http://www.apache.org/dyn/closer.cgi/jakarta/poi/ 最新的POI工具包

(以后我会用专门的网络硬盘来存放各种Jar文件,这样就不用那么麻烦去找Jar。)
2 . EXCEL 结构

HSSFWorkbook excell 文档对象介绍
HSSFSheet excell的表单
HSSFRow excell的行
HSSFCell excell的格子单元
HSSFFont excell字体
HSSFName 名称
HSSFDataFormat 日期格式
在poi1.7中才有以下2项:
HSSFHeader sheet头
HSSFFooter sheet尾
和这个样式
HSSFCellStyle cell样式
辅助操作包括
HSSFDateUtil 日期
HSSFPrintSetup 打印
HSSFErrorConstants 错误信息表

 

例子:

(我的例子使用Action来做的,因为集成SSH,这里的Struts用的是1.)

public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
   throws Exception {

 

//创建一个集合存放数据,假装是从数据库读取出来的。 List list = new ArrayList(); for(int i=0;i<20;i++){ DealMonito md = new DealMonito(); md.setId(i); md.setProductName("productName"+i); md.setProductCode("MS000000"+i); md.setEnterprise("enterprise"+i); md.setBuyUserId(i); md.setSellUserId(i); list.add(md); } //设置好输出用什么来输出是Excel还是别的什么东西。 response.reset(); response.setContentType("application/msexcel"); response.setHeader("Content-disposition","inline;filename=Results.xls"); //创建一个Excel HSSFWorkbook wb = new HSSFWorkbook(); //创建一个页,页的名字叫Sheet1 HSSFSheet sheet = wb.createSheet("sheet1"); //设置单元格的宽度 sheet.setDefaultColumnWidth((short) 20); //创建字体对象 HSSFFont font = wb.createFont(); //加粗 font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //字体用什么 font.setFontName("黑体 "); //字体大小 font.setFontHeight((short)300); //单元格样式对象 HSSFCellStyle cellStyle = wb.createCellStyle(); //单元格的字体用什么?就用上面设置好的东西 cellStyle.setFont(font); //单元格居中显示。 cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); cellStyle.setWrapText(true); //行对象创建,行和列都是从0开始的。。 HSSFRow rows = sheet.createRow((short) 0); rows.setHeightInPoints(20); //列对象 HSSFCell cell1 = rows.createCell((short) 0); HSSFCell cell2 = rows.createCell((short) 1); HSSFCell cell3 = rows.createCell((short) 2); HSSFCell cell4 = rows.createCell((short) 3); HSSFCell cell5 = rows.createCell((short) 4); HSSFCell cell6 = rows.createCell((short) 5); //设置单元格样式,就用上面的 cell1.setCellStyle(cellStyle); cell2.setCellStyle(cellStyle); cell3.setCellStyle(cellStyle); cell4.setCellStyle(cellStyle); cell5.setCellStyle(cellStyle); cell6.setCellStyle(cellStyle); //设置单元格的值,这个事已经废弃的方法,但是还是可以用的,暂时没有找到替代的方法 cell1.setCellValue("产品名称"); cell2.setCellValue("批准文号"); cell3.setCellValue("生产企业"); cell4.setCellValue("产品数量"); cell5.setCellValue("买方ID"); cell6.setCellValue("卖方ID"); //创建一个新的单元格样式对象,在下面用 HSSFCellStyle cs = wb.createCellStyle(); cs.setAlignment(HSSFCellStyle.ALIGN_CENTER); //循环添加元素 for(int i=1;i

 

 

不理解的就是为什么这个小框架要用short来做参数呢?懒得查了~!!!!!short第一次用啊~!这个基本上都是不会用的一个东西在这里出现了~!WHY?

 

 

这个文章一般是转帖··一般是我自己写的···(*^__^*) 嘻嘻……

 

你可能感兴趣的:(POI 完整实现打印。)