从空白生成文件的代码:
WordDocument doc = new WordDocument(); //设置内容标题 //创建DataRegion对象,PO_title为自动添加的书签名称,书签名称需以“PO_”为前缀,切书签名称不能重复 //三个参数分别为要新插入书签的名称、新书签的插入位置、相关联的书签名称(“[home]”代表Word文档的页首) DataRegion title = doc.createDataRegion("PO_title", DataRegionInsertType.After, "[home]"); //给DataRegion对象赋值 title.setValue("JAVA中编程实例 "); //设置字体:粗细、大小、字体名称、是否是斜体 title.getFont().setBold(true); title.getFont().setSize(20); title.getFont().setName("黑体"); title.getFont().setItalic(false); //定义段落对象 ParagraphFormat titlePara = title.getParagraphFormat(); //设置段落对齐方式 titlePara.setAlignment(WdParagraphAlignment.wdAlignParagraphCenter); //设置段落行间距 titlePara.setLineSpacingRule(WdLineSpacing.wdLineSpaceMultiple); //设置内容 //第一段 //创建DataRegion对象,PO_body为自动添加的书签名称 DataRegion body = doc.createDataRegion("PO_body", DataRegionInsertType.After, "PO_title"); //设置字体:粗细、是否是斜体、大小、字体名称、字体颜色 body.getFont().setBold(true); body.getFont().setItalic(true); body.getFont().setSize(10); //设置中文字体名称 body.getFont().setName("楷体"); //设置英文字体名称 body.getFont().setNameAscii("Times New Roman"); body.getFont().setColor(Color.red); //给DataRegion对象赋值 body.setValue("首先,我向大家介绍一下套接字的概念。 "); //创建ParagraphFormat对象 ParagraphFormat bodyPara = body.getParagraphFormat(); //设置段落的行间距、对齐方式、首行缩进 bodyPara.setLineSpacingRule(WdLineSpacing.wdLineSpaceAtLeast); bodyPara.setAlignment(WdParagraphAlignment.wdAlignParagraphLeft); bodyPara.setFirstLineIndent(21);
在一个word模板的文件中插入一个图片、word和Excel文档的代码:
WordDocument doc = new WordDocument(); //插入图片 // PO_body3是word模板中已存在的一个书签 DataRegion body4 = doc.createDataRegion("PO_body4", DataRegionInsertType.After, "PO_body3"); body4.setValue("[image]doc/logo.png[/image]"); //嵌入其他Word文件 //body4.Value = "[word]doc/1.doc[/word]"; //嵌入其他Excel文件 //body4.Value = "[excel]doc/1.xls[/excel]"; ParagraphFormat bodyPara4 = body4.getParagraphFormat(); bodyPara4.setAlignment(WdParagraphAlignment.wdAlignParagraphCenter);
操作word中的表格代码:
WordDocument doc = new WordDocument(); //打开数据区域 DataRegion dataRegion = doc.openDataRegion("PO_regTable"); //打开table,openTable(index)方法中的index代表Word文档中table位置的索引,从1开始 Table table = dataRegion.openTable(1); //给table中的单元格赋值, openCellRC(int,int)中的参数分别代表第几行、第几列,从1开始 table.openCellRC(3, 1).setValue("A公司"); table.openCellRC(3, 2).setValue("开发部"); table.openCellRC(3, 3).setValue("李清"); //插入一行,insertRowAfter方法中的参数代表第几行,从1开始 table.insertRowAfter(3); table.openCellRC(4, 1).setValue("B公司"); table.openCellRC(4, 2).setValue("销售部"); table.openCellRC(4, 3).setValue("张三");
给word添加一个水印,对于实现这个效果来说,PageOffice确实已经做到简单到极致,如果用iText那个方案,需要写至少十几行代码吧(由于篇幅的限制,这里就不写了,有兴趣的话可以网上搜索一下相关的资料),但 PageOffice的代码只用下面一句:
WordDocument doc =new WordDocument(); //添加水印 ,设置水印的内容 doc.getWaterMark().setText("北京某某公司");
优点有以下几点:不限制于Windows平台;接口和对象的设计就是针对Office文件生成专门优化设计的,代码写起来比较舒服可读性强;编程的工作量更小,如果开发中也利用了Word模板,那开发量可以更低;生成的文件是地地道道的Word格式,生成的文件效果比较完美;也不需要像POI那样必须对doc和docx格式分别写代码;最后一点:服务器端不需要安装Office,不使用服务器端资源,所以不需要处理服务器端文件生成时的并发问题,也就是很多用户同时访问系统生成文件时服务器的压力问题。请注意这点,采用这个方案的话,文件是在客户端生成的,调用的是客户端的资源,完全符合分布式计算的思想。