在開發文檔系統或辦公系統的過程當中,有時候咱們須要導出word文檔。在網上發現了一個用PageOffice生成word文件的功能,就將這塊拿出來和你們分享。html
生成word文件與咱們編輯word文檔本質上是相同的,只不過在用程序生成word文檔的時候換成了用代碼來操做。下面的例子中主要有添加標題,正文(段落、字體、字號、倍行間距、對齊方式、首行縮進等),插入圖片等操做。這裏寫的例子給出的內容只是PageOffice 組件生成word文件的部分方法,須要使用更多方法的仍是要本身根據實際的需求去查看API。API地址:http://www.zhuozhengsoft.com/help/java3/index.htmljava
查看com.zhuozhengsoft.pageoffice.wordwriter 包下的對象和方法是用來生成word文件的web
那就直接先上代碼吧:編程
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文件的末尾位置;app
--------------------------------------------------------------------------------------------------------------------------------------------------- 字體
public DataRegion createDataRegion(java.lang.String newDataRegionName, DataRegionInsertType insertType, java.lang.String relativeDataRegionName) throws java.lang.Exception, java.io.IOException
建立一個新的數據區域,並返回 DataRegion 對象。spa
調用此方法能夠輕鬆地在指定的數據區域以前或以後建立新的數據區域並對新數據區域賦值或控制。.net
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
查看示例:3、七、徹底編程實現動態生成Word文件