Java生成Word文档
在開發(fā)文檔系統(tǒng)或辦公系統(tǒng)的過程中,有時候我們需要導(dǎo)出word文檔。在網(wǎng)上發(fā)現(xiàn)了一個用PageOffice生成word文件的功能,就將這塊拿出來和大家分享。
? ? ? 生成word文件與我們編輯word文檔本質(zhì)上是相同的,只不過在用程序生成word文檔的時候換成了用代碼來操作。下面的例子中主要有添加標(biāo)題,正文(段落、字體、字號、倍行間距、對齊方式、首行縮進(jìn)等),插入圖片等操作。這里寫的例子給出的內(nèi)容只是PageOffice 組件生成word文件的部分方法,需要使用更多方法的還是要自己根據(jù)實(shí)際的需求去查看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?????//創(chuàng)建WordDocument對象?4?????WordDocument?doc?=?new?WordDocument();?5?????//設(shè)置內(nèi)容標(biāo)題?6?????//創(chuàng)建DataRegion對象,PO_title為自動添加的書簽名稱,書簽名稱需以“PO_”為前綴,切書簽名稱不能重復(fù)?7?????//三個參數(shù)分別為要新插入書簽的名稱、新書簽的插入位置、相關(guān)聯(lián)的書簽名稱(“[home]”代表Word文檔的第一個位置)?8?????DataRegion?title?=?doc.createDataRegion("PO_title",?9?????????????DataRegionInsertType.After,?"[home]");10?????//給DataRegion對象賦值11?????title.setValue("C#中Socket多線程編程實(shí)例\n");12?????//設(shè)置字體:粗細(xì)、大小、字體名稱、是否是斜體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?????//設(shè)置段落對齊方式20?????titlePara.setAlignment(WdParagraphAlignment.wdAlignParagraphCenter);21?????//設(shè)置段落行間距22?????titlePara.setLineSpacingRule(WdLineSpacing.wdLineSpaceMultiple);23?24?????//設(shè)置內(nèi)容25?????//第一段26?????//創(chuàng)建DataRegion對象,PO_body為自動添加的書簽名稱27?????DataRegion?body?=?doc.createDataRegion("PO_body",DataRegionInsertType.After,?"PO_title");28?????//設(shè)置字體:粗細(xì)、是否是斜體、大小、字體名稱、字體顏色29?????body.getFont().setBold(false);30?????body.getFont().setItalic(true);31?????body.getFont().setSize(10);32?????//設(shè)置中文字體名稱33?????body.getFont().setName("楷體");34?????//設(shè)置英文字體名稱35?????body.getFont().setName("Times?New?Roman");36?????body.getFont().setColor(Color.RED);37?????//給DataRegion對象賦值38?????body.setValue("是微軟隨著VS.net新推出的一門語言。它作為一門新興的語言,有著C++的強(qiáng)健,又有著VB等的RAD特性。而且,微軟推出C#主要的目的是為了對抗Sun公司的Java。大家都知道Java語言的強(qiáng)大功能,尤其在網(wǎng)絡(luò)編程方面。于是,C#在網(wǎng)絡(luò)編程方面也自然不甘落后于人。本文就向大家介紹一下C#下實(shí)現(xiàn)套接字(Sockets)編程的一些基本知識,以期能使大家對此有個大致了解。首先,我向大家介紹一下套接字的概念。\n");39?????//創(chuàng)建ParagraphFormat對象40?????ParagraphFormat?bodyPara?=?body.getParagraphFormat();41?????//設(shè)置段落的行間距、對齊方式、首行縮進(jìn)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協(xié)議的網(wǎng)絡(luò)通信的基本操作單元。可以將套接字看作不同主機(jī)間的進(jìn)程進(jìn)行雙向通信的端點(diǎn),它構(gòu)成了單個主機(jī)內(nèi)及整個網(wǎng)絡(luò)間的編程界面。套接字存在于通信域中,通信域是為了處理一般的線程通過套接字通信而引進(jìn)的一種抽象概念。套接字通常和同一個域中的套接字交換數(shù)據(jù)(數(shù)據(jù)交換也可能穿越域的界限,但這時一定要執(zhí)行某種解釋程序)。各種進(jìn)程使用這個相同的域互相之間用Internet協(xié)議簇來進(jìn)行通信。\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("套接字可以根據(jù)通信性質(zhì)分類,這種性質(zhì)對于用戶是可見的。應(yīng)用程序一般僅在同一類的套接字間進(jìn)行通信。不過只要底層的通信協(xié)議允許,不同類型的套接字間也照樣可以通信。套接字有兩種不同的類型:流套接字和數(shù)據(jù)報套接字。\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,"張三");
在開發(fā)的過程中可能會遇到的問題,在此給大家做個解釋。
DataRegion(數(shù)據(jù)區(qū)域):數(shù)據(jù)區(qū)域也就是“PO_”開頭的word書簽,標(biāo)記在生成文件的時數(shù)據(jù)在文件中插入的位置。
兩個無需定義的特殊位置:[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創(chuàng)建一個新的數(shù)據(jù)區(qū)域,并返回 DataRegion 對象。
調(diào)用此方法可以輕松地在指定的數(shù)據(jù)區(qū)域之前或之后創(chuàng)建新的數(shù)據(jù)區(qū)域并對新數(shù)據(jù)區(qū)域賦值或控制。
RelativeDataRegionName一般是文檔中已存在的用戶已預(yù)先定義的數(shù)據(jù)區(qū)域,但是RelativeDataRegionName還可以使用PageOffice開發(fā)平臺預(yù)留的兩個特殊數(shù)據(jù)區(qū)域:[HOME]和[END]。 [HOME]和[END]不需用戶打開文檔手動定義,它們分別代表文檔的開始光標(biāo)位置和結(jié)束光標(biāo)位置。
如果當(dāng)前文檔是空白文檔,一個數(shù)據(jù)區(qū)域都不存在,使用[HOME]和[END]可以從空白文檔生成一個圖文并茂的格式文檔。
參數(shù):
newDataRegionName?- 新建 DataRegion 的名稱。注意:應(yīng)當(dāng)確保不與文檔中已存在的數(shù)據(jù)區(qū)域同名。
insertType?- 新建 DataRegion 的插入方式。
relativeDataRegionName?- 相對 DataRegion 的名稱。
返回:
返回 DataRegion 對象。?
---------------------------------------------------------------------------------------------------------------------------------------------------
當(dāng)一個空白的word文件做模板時,文件中是沒有一個數(shù)據(jù)區(qū)域的,下面的代碼就是在word文件頁首位置的后面創(chuàng)建了一個數(shù)據(jù)區(qū)域PO_title,賦值了標(biāo)題內(nèi)容,然后在這個標(biāo)題的后面創(chuàng)建了一個數(shù)據(jù)區(qū)域PO_body,賦值了正文的內(nèi)容:
1?DataRegion?title?=?doc.createDataRegion("PO_title",DataRegionInsertType.After,?"[home]");2?title.setValue("C#中Socket多線程編程實(shí)例\n");3?DataRegion?body?=?doc.createDataRegion("PO_body",DataRegionInsertType.After,?"PO_title");4?body.setValue("是微軟隨著VS.net新推出的一門語言……");其他的代碼應(yīng)該就無需解釋了。運(yùn)行上面的程序就可以生成如下圖所示的word文件了。
×××:http://www.zhuozhengsoft.com/dowm/ 下載PageOffice for Java,解壓之后,拷貝Samples4文件夾到Tomcat的Webapps目錄下,訪問:http://localhost:8080/Samples4/index.html
查看示例:三、7、完全編程實(shí)現(xiàn)動態(tài)生成Word文件
轉(zhuǎn)載于:https://blog.51cto.com/13735769/2114387
總結(jié)
以上是生活随笔為你收集整理的Java生成Word文档的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VS2010 LNK1123:转换到 C
- 下一篇: 宜人蜂巢技术点解读