在开发文档系统或办公系统的过程中,有时候我们需要导出word文档。在网上发现了一个用PageOffice生成word文件的功能,就将这块拿出来和大家分享。

生成word文件与我们编辑word文档本质上是相同的,只不过在用程序生成word文档的时候换成了用代码来操作。下面的例子中主要有添加标题,正文(段落、字体、字号、倍行间距、对齐方式、首行缩进等),插入图片等操作。这里写的例子给出的内容只是PageOffice 组件生成word文件的部分方法,需要使用更多方法的还是要自己根据实际的需求去查看API。API地址:http://www.zhuozhengsoft.com/help/java3/index.html

  查看com.zhuozhengsoft.pageoffice.wordwriter 包下的对象和方法是用来生成word文件的

  

那就直接先上代码吧:

 1     PageOfficeCtrl poCtrl1 = new PageOfficeCtrl(request); 2     poCtrl1.setServerPage(request.getContextPath()+"/poserver.zz"); 3     //创建WordDocument对象 4     WordDocument doc = new WordDocument(); 5     //设置内容标题 6     //创建DataRegion对象,PO_title为自动添加的书签名称,书签名称需以“PO_”为前缀,切书签名称不能重复 7     //三个参数分别为要新插入书签的名称、新书签的插入位置、相关联的书签名称(“[home]”代表Word文档的第一个位置) 8     DataRegion title = doc.createDataRegion("PO_title", 9             DataRegionInsertType.After, "[home]");10     //给DataRegion对象赋值11     title.setValue("C#中Socket多线程编程实例\n");12     //设置字体:粗细、大小、字体名称、是否是斜体13     title.getFont().setBold(true);14     title.getFont().setSize(20);15     title.getFont().setName("黑体");16     title.getFont().setItalic(false);17     //定义段落对象18     ParagraphFormat titlePara = title.getParagraphFormat();19     //设置段落对齐方式20     titlePara.setAlignment(WdParagraphAlignment.wdAlignParagraphCenter);21     //设置段落行间距22     titlePara.setLineSpacingRule(WdLineSpacing.wdLineSpaceMultiple);23 24     //设置内容25     //第一段26     //创建DataRegion对象,PO_body为自动添加的书签名称27     DataRegion body = doc.createDataRegion("PO_body",DataRegionInsertType.After, "PO_title");28     //设置字体:粗细、是否是斜体、大小、字体名称、字体颜色29     body.getFont().setBold(false);30     body.getFont().setItalic(true);31     body.getFont().setSize(10);32     //设置中文字体名称33     body.getFont().setName("楷体");34     //设置英文字体名称35     body.getFont().setName("Times New Roman");36     body.getFont().setColor(Color.RED);37     //给DataRegion对象赋值38     body.setValue("是微软随着VS.net新推出的一门语言。它作为一门新兴的语言,有着C++的强健,又有着VB等的RAD特性。而且,微软推出C#主要的目的是为了对抗Sun公司的Java。大家都知道Java语言的强大功能,尤其在网络编程方面。于是,C#在网络编程方面也自然不甘落后于人。本文就向大家介绍一下C#下实现套接字(Sockets)编程的一些基本知识,以期能使大家对此有个大致了解。首先,我向大家介绍一下套接字的概念。\n");39     //创建ParagraphFormat对象40     ParagraphFormat bodyPara = body.getParagraphFormat();41     //设置段落的行间距、对齐方式、首行缩进42     bodyPara.setLineSpacingRule(WdLineSpacing.wdLineSpaceAtLeast);43     bodyPara.setAlignment(WdParagraphAlignment.wdAlignParagraphLeft);44     bodyPara.setFirstLineIndent(21);45 46     //第二段47     DataRegion body2 = doc.createDataRegion("PO_body2",DataRegionInsertType.After, "PO_body");48     body2.getFont().setBold(false);49     body2.getFont().setSize(12);50     body2.getFont().setName("黑体");51     body2.setValue("套接字是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。可以将套接字看作不同主机间的进程进行双向通信的端点,它构成了单个主机内及整个网络间的编程界面。套接字存在于通信域中,通信域是为了处理一般的线程通过套接字通信而引进的一种抽象概念。套接字通常和同一个域中的套接字交换数据(数据交换也可能穿越域的界限,但这时一定要执行某种解释程序)。各种进程使用这个相同的域互相之间用Internet协议簇来进行通信。\n");52     //body2.setValue("[image]../images/logo.jpg[/image]");53     ParagraphFormat bodyPara2 = body2.getParagraphFormat();54     bodyPara2.setLineSpacingRule(WdLineSpacing.wdLineSpace1pt5);55     bodyPara2.setAlignment(WdParagraphAlignment.wdAlignParagraphLeft);56     bodyPara2.setFirstLineIndent(21);57 58     //第三段59     DataRegion body3 = doc.createDataRegion("PO_body3", DataRegionInsertType.After, "PO_body2");60     body3.getFont().setBold(false);61     body3.getFont().setColor(Color.getHSBColor(0, 128, 228));62     body3.getFont().setSize(14);63     body3.getFont().setName("华文彩云");64     body3.setValue("套接字可以根据通信性质分类,这种性质对于用户是可见的。应用程序一般仅在同一类的套接字间进行通信。不过只要底层的通信协议允许,不同类型的套接字间也照样可以通信。套接字有两种不同的类型:流套接字和数据报套接字。\n");65     ParagraphFormat bodyPara3 = body3.getParagraphFormat();66     bodyPara3.setLineSpacingRule(WdLineSpacing.wdLineSpaceDouble);67     bodyPara3.setAlignment(WdParagraphAlignment.wdAlignParagraphLeft);68     bodyPara3.setFirstLineIndent(21);69 70         //第四段,插入图片71     DataRegion body4 = doc.createDataRegion("PO_body4", DataRegionInsertType.After, "PO_body3");72     body4.setValue("[image]doc/logo.png[/image]");73     //body4.setValue("[word]doc/1.doc[/word]");//还可嵌入其他Word文件74     ParagraphFormat bodyPara4 = body4.getParagraphFormat();75     bodyPara4.setAlignment(WdParagraphAlignment.wdAlignParagraphCenter);76 77     poCtrl1.setWriter(doc);78     poCtrl1.webOpen("doc/template.doc", OpenModeType.docNormalEdit,"张三");

  在开发的过程中可能会遇到的问题,在此给大家做个解释。

  DataRegion(数据区域):数据区域也就是“PO_”开头的word书签,标记在生成文件的时数据在文件中插入的位置。

  两个无需定义的特殊位置:[home]:表示一个word文件页首的位置;[end]:表示word文件的末尾位置;

---------------------------------------------------------------------------------------------------------------------------------------------------  

  createDataRegion

  public DataRegion createDataRegion(java.lang.String newDataRegionName,                                   DataRegionInsertType insertType,java.lang.String relativeDataRegionName)throws java.lang.Exception,java.io.IOException
  • 创建一个新的数据区域,并返回 DataRegion 对象。

    调用此方法可以轻松地在指定的数据区域之前或之后创建新的数据区域并对新数据区域赋值或控制。

    RelativeDataRegionName一般是文档中已存在的用户已预先定义的数据区域,但是RelativeDataRegionName还可以使用PageOffice开发平台预留的两个特殊数据区域:[HOME]和[END]。 [HOME]和[END]不需用户打开文档手动定义,它们分别代表文档的开始光标位置和结束光标位置。

    如果当前文档是空白文档,一个数据区域都不存在,使用[HOME]和[END]可以从空白文档生成一个图文并茂的格式文档。

    • 参数:

    • newDataRegionName - 新建 DataRegion 的名称。注意:应当确保不与文档中已存在的数据区域同名。

    • insertType - 新建 DataRegion 的插入方式。

    • relativeDataRegionName - 相对 DataRegion 的名称。

    • 返回:

    • 返回 DataRegion 对象。  

---------------------------------------------------------------------------------------------------------------------------------------------------

  当一个空白的word文件做模板时,文件中是没有一个数据区域的,下面的代码就是在word文件页首位置的后面创建了一个数据区域PO_title,赋值了标题内容,然后在这个标题的后面创建了一个数据区域PO_body,赋值了正文的内容:

1 DataRegion title = doc.createDataRegion("PO_title",DataRegionInsertType.After, "[home]");2 title.setValue("C#中Socket多线程编程实例\n");3 DataRegion body = doc.createDataRegion("PO_body",DataRegionInsertType.After, "PO_title");4 body.setValue("是微软随着VS.net新推出的一门语言……");

  其他的代码应该就无需解释了。运行上面的程序就可以生成如下图所示的word文件了。

  

  ×××:http://www.zhuozhengsoft.com/dowm/ 下载PageOffice for Java,解压之后,拷贝Samples4文件夹到Tomcat的Webapps目录下,访问:http://localhost:8080/Samples4/index.html

  查看示例:三、7、完全编程实现动态生成Word文件

转载于:https://blog.51cto.com/13735769/2114387

Java生成Word文档相关推荐

  1. [摘]用Java生成Word文档

    开发中隔三叉五的就要用到Word,经常被搞得不胜其烦,不过这次找到了不少好例子,干脆将他们都摘了过来,内容如下: 1. poi是apache的一个项目,不过就算用poi你可能都觉得很烦,不过不要紧,这 ...

  2. 用java生成word文档(转载)

    用java生成word文档 poi是apache的一个项目,不过就算用poi你可能都觉得很烦,不过不要紧,这里提供了更加简单的一个接口给你: 下载经过封装后的poi包: 这个包就是:tm-extrac ...

  3. Java 生成Word文档 — 简单示例

    前言 这篇文章将介绍如何使用免费Java Word组件Free Spire.Doc for Java在Java应用程序中生成Word文档,插入文本,并设置段落的字体格式.对齐方式以及段后间距等. Fr ...

  4. java生成word文档freemarker

    java freemarker + word 模板 生成 word 文档 (变量替换,数据的循环,表格数据的循环,以及图片的替换) 1,最近有个需求,动态生成 Word 文当并供前端下载,网上找了一下 ...

  5. java生成word文档(最简单)

    首先说明,使用该方法时,尽量不要使用wps新建word文档,经测试,手机不能兼容,出现很多格式问题,office则手机可以很好的兼容,所以,本文以office做教程 1 首先新建一个word文档,然后 ...

  6. 记录一次用Java生成word文档的经验

    业务背景 最近接到一个需求需要将学员的基本信息生成word格式的内容,word的格式如下图所示 开发的任务就是将学员的信息替换掉表格中的** 即可,感觉还蛮简单的. 相信大家以前做的最多的是Java和 ...

  7. java word模板poi生成文件_poi读写word模板 / java生成word文档

    有一word文档表格 形如: 姓名 ${name} 电话 ${tel} 下载包链接:点击进入 从数据库读取记录替换上述变量 import java.io.FileOutputStream; impor ...

  8. java生成word文档_Java多种方式动态生成doc文档

    本来是要在Android端生成doc的(这需求...),最后方法没有好的方法能够在Android上做到完美,最后还是只能搬迁到服务器.不浪费,还是记录下各框架不支持Android的原因以及他们的特点. ...

  9. java生成word文档 图片_java生成带有图片的word的文档-Go语言中文社区

    生成带有图片的word的文档 @RequestMapping(params ="getWordByDate",produces = "text/html;charset= ...

最新文章

  1. tableau实战系列(二十五)-如何将 R语言与tableau进行结合,实现聚类分析
  2. python堆堆乐教程_python堆排序,详细过程图和讲解,这样做小白都会
  3. 2015年10月15日学习html基础笔记
  4. win配置环境变量以及一些变量换行类的小技巧
  5. leetcode 26. 删除有序数组中的重复项
  6. PixiJS - 基于 WebGL 的超快 HTML5 2D 渲染引擎
  7. 第十五章,读取txt文件(C++)
  8. 第一章 初识 MyBatis
  9. 既然现在处理器性能过剩,为什么PC用起来不流畅?
  10. iPhone开发之self.的用法
  11. Android 多个listview的实现
  12. 如何成为一个优秀的计算机工程师,如何成为一个优秀的电气工程师
  13. python reportlab
  14. 我的世界服务器修改世界难度,我的世界服务器空岛生存调难度指令 | 手游网游页游攻略大全...
  15. 解决websocket链接失败防火墙规则问题
  16. android新版本怎么下载安装,android 新版本下载 安装
  17. 计算机开机黑屏90,终于晓得笔记本电脑开机黑屏检修步骤
  18. 长沙有哪些优秀的互联网公司?长沙适合定居吗?
  19. 从分散到统一,京东IM工具“咚咚”的架构演进
  20. php教程燕十八_2PHP 3小时光速入门视频教程【燕十八】

热门文章

  1. gcc -ldl 选项作用
  2. bioskey的用法
  3. RegularExpressionValidator 控件用法
  4. mascara-2(MetaMask/mascara本地实现)-连接线上钱包
  5. 这份优化清单,你做了哪些?
  6. Android怎样保证一个线程最多仅仅能有一个Looper?
  7. 主线程和子线程的同步控制
  8. 【转载】探索式测试基础系列—生活进阶曲
  9. ORACLE初始化参数文件概述
  10. FMDB:中的用法介绍