[转载]Java生成Word文档

 在开发文档系统或办公系统的过程中,有时候我们需要导出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://www.cnblogs.com/qq742655/p/9019576.html

时间: 2024-10-11 20:53:03

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

Java生成word文档

itext-rtf-2.1.7.jar,下载地址:http://download.csdn.net/detail/xuxu198899223/7717727 itext-2.1.7.jar 下载地址:http://download.csdn.net/detail/xuxu198899223/7717717 package word; import java.io.FileOutputStream; import java.io.IOException; import java.util.Arra

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

首先告诉大家这篇文章的原始出处:http://www.havenliu.com/java/514.html/comment-page-1#comment-756 我也是根据他所描述完成的,但是有一些地方有点模糊,不容易弄出来.所以,我另外写一篇,让大家少走一些弯路. 上图:是Word文档中的内容,也就是模板,为了下面步鄹做铺垫,所以在需要输入数据的地方改成了拼音, 将word文档另存为xml文件. 接下来,上面写的拼音就起到作用了. 打开xml文件.搜索 title. 将Title 改为 ${t

Java生成word文档 最简上手教程

先要配置环境: 下载地址: 1,Free Spire.Doc for Java 下载网址:https://www.e-iceblue.cn/Downloads/Free-Spire-Doc-JAVA.html 2,因为我的是java 9.0 所以运行代码的时候会报一些错误:网上的解决办法大多是要降版本,但是我认为还是添加jar包更容易         jar包下载地址:https://github.com/Smartisa/JAR/tree/master/word文档 上代码: 1 packag

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

做项目的过程中,经常需要把数据里里的数据读出来,经过加工,以word格式输出. 在网上找了很多解决方案都不太理想,偶尔发现了PageOffice,一个国产的Office插件,开发调用非常简单!比网上介绍的poi,jacob等解决方按容易上手多了!功能接口虽然没有poi,jacob那么多,但是满足了一般的需求的百分之八九十,而且不像poi那样还需要区分处理07格式和03格式那么麻烦. 下面是百度百科PageOffice的介绍: https://baike.baidu.com/item/PageOf

java生成word文档【二】

/** * <p>expWordByItext方法主要用于-采用itext导出文档到word.</p> * <p>优缺点-可将随意控制生成word的格式,但代码控制上比采用模板的方式稍微复杂,可设置页眉页脚等其他文档属性.</p> * <p>第三方jar-itext-2.1.7.jar.itext-rtf-2.1.7.jar.<br> * import com.lowagie.text.Document;<br> * im

java使用freemarker 生成word文档

java 生成word文档 最近需要做一个导出word的功能, 在网上搜了下, 有用POI,JXL,iText等jar生成一个word文件然后将数据写到该文件中,API非常繁琐而且拼出来的样式也不美观,于是选择了另一种方式----feemarker基于word模板的导出方式, 这种方式非常简单而且导出的样式美观, 其原理就是先做一个word模板, 该模板中变量数据用${xxx}这种方式填写, 然后再导出时只需读取模板然后用相应的数据替换其中的${xxx}即可. 一,简单模板导出(不含图片, 不含

Java Web项目中使用Freemarker生成Word文档

Web项目中生成Word文档的操作屡见不鲜,基于Java的解决方案也是很多的,包括使用Jacob.Apache POI.Java2Word.iText等各种方式,其实在从Office 2003开始,就可以将Office文档转换成XML文件,这样只要将需要填入的内容放上${}占位符,就可以使用像Freemarker这样的模板引擎将出现占位符的地方替换成真实数据,这种方式较之其他的方案要更为简单. 下面举一个简单的例子,比如在Web页面中填写个人简历,然后点击保存下载到本地,效果图如下所示. 打开下

java通过freemarket生成word文档

1.使用freemarker的原因是:由于POI和ITEXT在处理复杂word文档格式时欠缺,尤其在生成WORD文档时,(其他处理word的工具需要动态加载windows动态链接库,有些还要收费),并且需求要在WORD指定位置插入图片,所以在参考了POI和ITEXT官网处理WORD和网络上其他处理WORD的工具后,发现freemarker可以通过设定WORD模板,经过处理生成ftl文件后,可直接通过freemarker的工具jar包可以生成指定位置的WORD文件.(不过用模板生成有个别缺点,一是

java通过word模板生成word文档

介绍 上次公司项目需要一个生成word文档的功能,有固定的模板根据业务填充数据即可,由于从来没做过,项目也比较着急于是去网上找有没有合适的工具类,找了好几种,看到其中有freeMark模板生成比较靠谱于是采用这个,正常生成成功了还挺高兴的于是修改优化部署测试,出问题了,由于我一直使用wps可以正常打开,但是同事使用office打不开,于是各种查找原因都没好,于是只能转变思路又试了两种还是不好用,直到发现这款模板生成 poi-tl 真的做的很不错,而且是国人写的,关于学习这个东西还是看官方文档的好