在开发文档系统或办公系统的过程中,有时候我们需要导出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. TypeError: Object of type 'int32' is not JSON serializable ——已解决

    将模型用flask封装,返回json时报错:TypeError: Object of type 'int32' is not JSON serializable 网上搜索出的解决方案:重写json.J ...

  2. hbase(一)

    1.hbase安装参考 http://blog.csdn.net/wild46cat/article/details/53214159 2.遇到的问题: ERROR: The node /hbase ...

  3. 论文笔记:OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks

    2014 ICLR 纽约大学 LeCun团队 Pierre Sermanet, David Eigen, Xiang Zhang, Michael Mathieu, Rob Fergus, Yann ...

  4. hadoop 一些命令

    关闭访问墙  service iptables stop hadoop dfs -mkdir input hadoop dfs -copyFromLocal conf/* input hadoop j ...

  5. 【DeepLearning学习笔记】Neurons神经元

    今天找到一个比较好的deep learning的教材:Neural Networks and Deep Learning 对神经网络有详细的讲解,鉴于自己青年痴呆,还是总结下笔记吧=.= Percep ...

  6. Centos编译安装 LAMP (apache-2.4.7 + mysql-5.5.35 + php 5.5.8)+ Redis

    转载地址:http://www.cnblogs.com/whoamme/p/3530056.html 软件源代码包存放位置:/usr/local/src 源码包编译安装位置:/usr/local/软件 ...

  7. SQL Server 对XML数据类型的SQL语句总结

    --创建XMLTable , ) primary key, XMLCol xml); go ------------------------------------------------------ ...

  8. JAVA基本常识及环境搭建

    JAVA基本常识及环境搭建 常用dos命令行 dir 列出当前目录下的文件以及文件夹 md 创建目录 cd 进入指定目录 cd.. 退回到上一级目录 cd/ 退回到根目录 del 删除文件 删除单个文 ...

  9. 20145322《Java程序设计》第4次实验报告

    实验内容 1.搭建Android环境 2.运行Android 3.修改代码并输出自己的学号 实验步骤 搭建Android环境 安装Android,核心是配置JDK.SDK 运行Android 最终结果 ...

  10. 通过Excel生成批量SQL语句

    项目中有时会遇到这样的要求:用户给发过来一些数据,要我们直接给存放到数据库里面,有的是Insert,有的是Update等等,少量的数据我们可以采取最原始的办法,也就是在SQL里面用Insert int ...