在开发文档系统或办公系统的过程中,有时候我们需要导出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文件

[转载]Java生成Word文档的更多相关文章

  1. 使用Java生成word文档(附源码)

    当我们使用Java生成word文档时,通常首先会想到iText和POI,这是因为我们习惯了使用这两种方法操作Excel,自然而然的也想使用这种生成word文档.但是当我们需要动态生成word时,通常不 ...

  2. Java生成 Word文档的并打印解决方案

    户要求用程序生成标准的word文档,要能打印,而且不能变形,以前用过很多解决方案,都在客户严格要求下牺牲的无比惨烈. POI读word文档还行,写文档实在不敢恭维,复杂的样式很难控制不提,想象一下一个 ...

  3. [原创]Java生成Word文档

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

  4. poi读写word模板 / java生成word文档

    有一word文档表格 形如: 姓名 ${name} 电话 ${tel} 从数据库读取记录替换上述变量 import java.io.FileOutputStream; import java.util ...

  5. Java生成word文档

    itext-rtf-2.1.7.jar,下载地址:http://download.csdn.net/detail/xuxu198899223/7717727 itext-2.1.7.jar 下载地址: ...

  6. [转载]java获取word文档的条目化内容

    在开发Web办公系统或文档系统时,PageOffice组件是众所周知的在线处理微软word/ppt/excel文档的强大工具,它对WORD文档的各种处理在API层面进行了封装,屏蔽了Office VB ...

  7. JAVA生成Word文档(经过测试)

    首先告诉大家这篇文章的原始出处:http://www.havenliu.com/java/514.html/comment-page-1#comment-756 我也是根据他所描述完成的,但是有一些地 ...

  8. [转载]java读写word文档,完美解决方案

    做项目的过程中,经常需要把数据里里的数据读出来,经过加工,以word格式输出. 在网上找了很多解决方案都不太理想,偶尔发现了PageOffice,一个国产的Office插件,开发调用非常简单!比网上介 ...

  9. java使用freemarker 生成word文档

      java 生成word文档     最近需要做一个导出word的功能, 在网上搜了下, 有用POI,JXL,iText等jar生成一个word文件然后将数据写到该文件中,API非常繁琐而且拼出来的 ...

随机推荐

  1. 定时任务之elastic-job概述

    定时任务有哪些? Timer定时器 ScheduledExecutorService Spring自带的@Scheduled Quartz定时任务 当当elastic job定时任务 Quartz实现 ...

  2. scala和正则表达式常用基础知识示例

    http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html .     匹配除换行符以外的 ...

  3. 重命名文件或文件夹(mv命令与rename命令)

    在Linux下重命名文件或目录,可以使用mv命令或rename命令,这里分享下二者的使用方法. mv命令既可以重命名,又可以移动文件或文件夹. 例子:将目录A重命名为B mv A B 例子:将/a目录 ...

  4. vux在ISO中异常 this.$vux.confirm.show

    在按钮事件中调用this.$vux.confirm.show,并且启用按钮的show-loading属性 安卓正常,ios中弹窗无法显示 经过排查,iso中设置按钮的loading后,要用异步setT ...

  5. java之继承中的构造方法

    继承中的构造方法  1.子类的构造过程中必须调用其基类的构造方法. 2.子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法. 2.1.使用this(argumen ...

  6. 刷新DNS解析缓存

    为了提高网站的访问速度,系统会在成功访问某网站后将该网站的域名.IP地址信息缓存到本地.下次访问该域名时直接通过IP进行访问. 一些网站的域名没有变化,但IP地址发生变化,有可能因本地的DNS缓存没有 ...

  7. 20135320赵瀚青LINUX内核分析第三周学习笔记

    赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 本周是学习的主要是构造 ...

  8. 【转】获取Windows系统明文密码神器

    前序 电脑密码忘记了可以用本工具找回,前提是你能进入系统,例如本机保存了远程服务器登录的密码或借别人的电脑,而忘记了密码:mimikatz 2.0工具正好解决了你的问题. 工具下载 binaires ...

  9. CORE MVC 自定义认证

    微软的认证体系,集成了EF,和它的表结构,对于我们已有的系统,或者想高度自定义的人,该怎么办呢? 答案在: https://docs.microsoft.com/en-us/aspnet/core/s ...

  10. 批处理命令 For循环命令详解!

    批处理for命令详解FOR这条命令基本上都被用来处理文本,但还有其他一些好用的功能!看看他的基本格式(这里我引用的是批处理中的格式,直接在命令行只需要一个%号)FOR 参数 %%变量名 IN (相关文 ...