欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

pageoffice动态生成WORD文件

程序员文章站 2022-05-30 15:36:41
...

PageOffice 组件提供的接口和对象都简洁高效,开发效率很高。不仅支持从一个空白的Word生成文件,还可以对现有的word模板做数据填充,还可以把多个word模板插入到一个word模板中不同的位置来组合生成文件,比如做一个试卷生成系统,甚至还可以插入图片和Excel文件到word模板中的指定位置去生成一个复合型的文档报表,功能异常强大。下面列举几个生成文件的效果代码:

  1. 从空白生成文件的代码:
    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);
  1. 在一个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);
  1. 操作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("张三");
  1. 给word添加一个水印,对于实现这个效果来说,PageOffice确实已经做到简单到极致,如果用iText那个方案,需要写至少十几行代码吧(由于篇幅的限制,这里就不写了,有兴趣的话可以网上搜索一下相关的资料),但 PageOffice的代码只用下面一句:
    WordDocument doc =new WordDocument();
    //添加水印 ,设置水印的内容
    doc.getWaterMark().setText("北京某某公司");

优点有以下几点:不限制于Windows平台;接口和对象的设计就是针对Office文件生成专门优化设计的,代码写起来比较舒服可读性强;编程的工作量更小,如果开发中也利用了Word模板,那开发量可以更低;生成的文件是地地道道的Word格式,生成的文件效果比较完美;也不需要像POI那样必须对doc和docx格式分别写代码;最后一点:服务器端不需要安装Office,不使用服务器端资源,所以不需要处理服务器端文件生成时的并发问题,也就是很多用户同时访问系统生成文件时服务器的压力问题。请注意这点,采用这个方案的话,文件是在客户端生成的,调用的是客户端的资源,完全符合分布式计算的思想。