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://blog.51cto.com/13735769/2114387
總結
以上是生活随笔為你收集整理的Java生成Word文档的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VS2010 LNK1123:转换到 C
- 下一篇: 宜人蜂巢技术点解读