PageOffice动态生成WORD文件

从空白生成文件的代码:

    WordDocument doc = new WordDocument();
    
    //设置内容标题
    //创建DataRegion对象,PO_title为自动添加的书签名称,书签名称需以“PO_”为前缀,切书签名称不能重复
    //三个参数分别为要新插入书签的名称、新书签的插入位置、相关联的书签名称(“[home]”代表Word文档的页首)
    DataRegion title = doc.createDataRegion("PO_title", DataRegionInsertType.After, "[home]");
    //给DataRegion对象赋值
    title.setValue("JAVA中编程实例\n");
    //设置字体:粗细、大小、字体名称、是否是斜体
    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("首先,我向大家介绍一下套接字的概念。\n");
    //创建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,不使用服务器端资源,所以不需要处理服务器端文件生成时的并发问题,也就是很多用户同时访问系统生成文件时服务器的压力问题。请注意这点,采用这个方案的话,文件是在客户端生成的,调用的是客户端的资源,完全符合分布式计算的思想。

posted @ 2019-01-18 11:49  oO星芒蝶翼Oo  阅读(3610)  评论(0编辑  收藏  举报