JAVA生成WORD文件的方法目前有以下种:
一种是jacob 但是局限于windows平台 往往许多JAVA程序运行于其他操作系统 在此不讨论该方案
一种是pio但是他的excel处理很程序 word模块还局限于读取word的文本内容,写word文件就更弱项了
当我使用这个JAVA生成RTF文件时费了好大的劲,原本是想生成WORD文档的,但是WORD文档POI只支持往生成的WORD中填入文本,对于图片根本就不支持。后来想想,RTF格式的也可用WORD打开,不如生成RTF。结果上网搜了很多技术,Itext,jacob,java2word,rtftemplate,reportrunner看了近一天也没什么头绪,写这些示例的几乎没有,还好Itext的例子有那么几个,可是我上官网下了最新核心包后发现,导入例子中居然全部红叉,原本以为上错网站了,再经过核实还是对的,于是断定网上的例子肯定有误,itext或许不能用。绕了大半天其他的技术我真的没法弄了,还是回到了iText,静下心来思考觉得包肯定有问题,仔细一看原来最新版的是支持PDF版的iText-5.0.1.jar是不对的,本来以为最新的功能最全了,没想到错了,想到这里赶紧下了稍微iText-2.1.7.jar结果终于成功了,感慨不已!现贡献代码如下记住官网上只能下到核心包:iText-1.2.7.jar和支持rtf的iText-rtf-2.1.7.jar这两个貌似对了,其实还有一个包是比较重要的iTextAsian.jar这个包对于设置字体什么的起了关键作用上网可以搜到的.
本文介绍的是itext生成rtf文件并保存格式为word 此方案本人已实践过 并已在项目中使用
用到的jar包:
iText-2.1.7.jar
iText-rtf-2.1.7.jar
iTextAsian.jar
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(); } } }
代码2:
<span style="">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.Element; import com.lowagie.text.Font; import com.lowagie.text.PageSize; import com.lowagie.text.Paragraph; import com.lowagie.text.Table; import com.lowagie.text.pdf.BaseFont; import com.lowagie.text.rtf.RtfWriter2; public class CreateWordDemo { public void createDocContext(String file,String contextString)throws DocumentException, IOException{ //设置纸张大小 Document document = new Document(PageSize.A4); //建立一个书写器,与document对象关联 RtfWriter2.getInstance(document, new FileOutputStream(file)); document.open(); //设置中文字体 BaseFont bfChinese = BaseFont.createFont("STSongStd-Light","UniGB-UCS2-H",BaseFont.NOT_EMBEDDED); //标题字体风格 Font titleFont = new Font(bfChinese,12,Font.BOLD); //正文字体风格 Font contextFont = new Font(bfChinese,10,Font.NORMAL); Paragraph title = new Paragraph("标题"); //设置标题格式对齐方式 title.setAlignment(Element.ALIGN_CENTER); title.setFont(titleFont); document.add(title); Paragraph context = new Paragraph(contextString); context.setAlignment(Element.ALIGN_LEFT); context.setFont(contextFont); //段间距 context.setSpacingBefore(3); //设置第一行空的列数 context.setFirstLineIndent(20); document.add(context); //设置Table表格,创建一个三列的表格 Table table = new Table(3); int width[] = {25,25,50};//设置每列宽度比例 table.setWidths(width); table.setWidth(90);//占页面宽度比例 table.setAlignment(Element.ALIGN_CENTER);//居中 table.setAlignment(Element.ALIGN_MIDDLE);//垂直居中 table.setAutoFillEmptyCells(true);//自动填满 table.setBorderWidth(1);//边框宽度 //设置表头 Cell haderCell = new Cell("表格表头"); haderCell.setHeader(true); haderCell.setColspan(3); table.addCell(haderCell); table.endHeaders(); Font fontChinese = new Font(bfChinese,12,Font.NORMAL,Color.GREEN); Cell cell = new Cell(new Paragraph("这是一个3*3测试表格数据",fontChinese)); cell.setVerticalAlignment(Element.ALIGN_MIDDLE); table.addCell(cell); table.addCell(new Cell("#1")); table.addCell(new Cell("#2")); table.addCell(new Cell("#3")); document.add(table); document.close(); } public static void main(String[] args) { CreateWordDemo word = new CreateWordDemo(); String file = "test.doc"; try { word.createDocContext(file, "测试iText导出Word文档"); } catch (DocumentException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }</span>
图片版:
<span style="font-size: medium;">/** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub try { RTFCreate rtfMain = new RTFCreate(); rtfMain.createRTFContext(FILE_NAME); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void createRTFContext(String path) throws DocumentException, IOException { Document document = new Document(PageSize.A4); RtfWriter2.getInstance(document, new FileOutputStream(path)); document.open(); // 设置中文字体 BaseFont bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); // 标题字体风格 Font titleFont = new Font(bfChinese, 12, Font.BOLD); // 正文字体风格 Font contextFont = new Font(bfChinese, 10, Font.NORMAL); Paragraph title = new Paragraph("标题"); // 设置标题格式对齐方式 title.setAlignment(Element.ALIGN_CENTER); title.setFont(titleFont); document.add(title); String contextString = "iText是一个能够快速产生PDF文件的java类库。iText的java类对于那些要产生包含文本,表格,图形的只读文档是很有用的。它的类库尤其与java Servlet有很好的给合。使用iText与PDF能够使你正确的控制Servlet的输出。"; Paragraph context = new Paragraph(contextString); // 正文格式左对齐 context.setAlignment(Element.ALIGN_LEFT); context.setFont(contextFont); // 离上一段落(标题)空的行数 context.setSpacingBefore(20); // 设置第一行空的列数 context.setFirstLineIndent(20); document.add(context); // //在表格末尾添加图片 Image png = Image.getInstance("c:/fruit.png"); document.add(png); document.close(); } } </span>