很多情況下,軟件開發者需要從數據庫讀取數據,然后將數據動態填充到手工預先准備好的Word模板文檔里,這對於大批量生成擁有相同格式排版的正式文件非常有用,這個功能應用PageOffice的基本動態填充功能即可實現。但若是用戶想動態生成一個沒有固定模版的公文時,換句話說,沒有辦法事先准備一個固定格式的模板時,就需要開發人員在后台用代碼實現Word文檔的從零到圖文並茂的動態生成功能了。這里的“零”指的是Word空白文檔。
那如何實現Word文檔的從無到有呢,下面就把利用PageOffice實現這一功能的過程介紹一下。例如,想生成一個Word文檔,里面的內容為:標題(粗體、黑體、字體大小為20、居中顯示)、第一段內容(內容(略)、字體傾斜、字體大小為10、中文“楷體”、英文“Times New Roman”、紅色、最小行間距、左對齊、首行縮進)、第二段內容(內容(略)、字體大小為12、黑體、1.5倍行間距、左對齊、首行縮進)、第三段內容(內容(略)、字體大小為14、華文彩雲、2倍行間距、左對齊、首行縮進)、第四段內容插入一張圖片。
1. 百度一下PageOffice,從官網下載PageOffice for Java的開發包;
2. 拷貝“集成文件”文件夾中的 lib 文件夾覆蓋到您自己 Web 項目中 WEB-INF 目錄下;
3. 打開“集成文件”文件夾中的 web.xml 文件,拷貝PageOffice的相關配置到自己 Web 項目中的 web.xml 文件中;
4. 編程調用PageOffice的WordDocument對象,生成圖文並茂的文件。代碼如下:
PageOfficeCtrl poCtrl1 = new PageOfficeCtrl(request); poCtrl1.setServerPage(request.getContextPath()+"/poserver.zz"); //創建WordDocument對象 WordDocument doc = new WordDocument(); //設置內容標題 //創建DataRegion對象,PO_title為自動添加的書簽名稱,書簽名稱需以“PO_”為前綴,切書簽名稱不能重復 //三個參數分別為要新插入書簽的名稱、新書簽的插入位置、相關聯的書簽名稱(“[home]”代表Word文檔的第一個位置) DataRegion title = doc.createDataRegion("PO_title", DataRegionInsertType.After, "[home]"); //給DataRegion對象賦值 title.setValue("C#中Socket多線程編程實例\n"); //設置字體:粗細、大小、字體名稱、是否是斜體 title.getFont().setBold(true); title.getFont().setSize(20); title.getFont().setName("黑體"); title.getFont().setItalic(false); //定義段落對象 ParagraphFormat titlePara = title.getParagraphFormat(); //設置段落對齊方式 titlePara.setAlignment(WdParagraphAlignment.wdAlignParagraphCenter); //設置段落行間距 titlePara.setLineSpacingRule(WdLineSpacing.wdLineSpaceMultiple); //設置內容 //第一段 //創建DataRegion對象,PO_body為自動添加的書簽名稱 DataRegion body = doc.createDataRegion("PO_body",DataRegionInsertType.After, "PO_title"); //設置字體:粗細、是否是斜體、大小、字體名稱、字體顏色 body.getFont().setBold(false); body.getFont().setItalic(true); body.getFont().setSize(10); //設置中文字體名稱 body.getFont().setName("楷體"); //設置英文字體名稱 body.getFont().setName("Times New Roman"); body.getFont().setColor(Color.RED); //給DataRegion對象賦值 body.setValue("是微軟隨着VS.net新推出的一門語言。它作為一門新興的語言,有着C++的強健,又有着VB等的RAD特性。而且,微軟推出C#主要的目的是為了對抗Sun公司的Java。大家都知道Java語言的強大功能,尤其在網絡編程方面。於是,C#在網絡編程方面也自然不甘落后於人。本文就向大家介紹一下C#下實現套接字(Sockets)編程的一些基本知識,以期能使大家對此有個大致了解。首先,我向大家介紹一下套接字的概念。\n"); //創建ParagraphFormat對象 ParagraphFormat bodyPara = body.getParagraphFormat(); //設置段落的行間距、對齊方式、首行縮進 bodyPara.setLineSpacingRule(WdLineSpacing.wdLineSpaceAtLeast); bodyPara.setAlignment(WdParagraphAlignment.wdAlignParagraphLeft); bodyPara.setFirstLineIndent(21); //第二段 DataRegion body2 = doc.createDataRegion("PO_body2",DataRegionInsertType.After, "PO_body"); body2.getFont().setBold(false); body2.getFont().setSize(12); body2.getFont().setName("黑體"); body2.setValue("套接字是通信的基石,是支持TCP/IP協議的網絡通信的基本操作單元。可以將套接字看作不同主機間的進程進行雙向通信的端點,它構成了單個主機內及整個網絡間的編程界面。套接字存在於通信域中,通信域是為了處理一般的線程通過套接字通信而引進的一種抽象概念。套接字通常和同一個域中的套接字交換數據(數據交換也可能穿越域的界限,但這時一定要執行某種解釋程序)。各種進程使用這個相同的域互相之間用Internet協議簇來進行通信。\n"); //body2.setValue("[image]../images/logo.jpg[/image]"); ParagraphFormat bodyPara2 = body2.getParagraphFormat(); bodyPara2.setLineSpacingRule(WdLineSpacing.wdLineSpace1pt5); bodyPara2.setAlignment(WdParagraphAlignment.wdAlignParagraphLeft); bodyPara2.setFirstLineIndent(21); //第三段 DataRegion body3 = doc.createDataRegion("PO_body3", DataRegionInsertType.After, "PO_body2"); body3.getFont().setBold(false); body3.getFont().setColor(Color.getHSBColor(0, 128, 228)); body3.getFont().setSize(14); body3.getFont().setName("華文彩雲"); body3.setValue("套接字可以根據通信性質分類,這種性質對於用戶是可見的。應用程序一般僅在同一類的套接字間進行通信。不過只要底層的通信協議允許,不同類型的套接字間也照樣可以通信。套接字有兩種不同的類型:流套接字和數據報套接字。\n"); ParagraphFormat bodyPara3 = body3.getParagraphFormat(); bodyPara3.setLineSpacingRule(WdLineSpacing.wdLineSpaceDouble); bodyPara3.setAlignment(WdParagraphAlignment.wdAlignParagraphLeft); bodyPara3.setFirstLineIndent(21); //第四段,插入圖片 DataRegion body4 = doc.createDataRegion("PO_body4", DataRegionInsertType.After, "PO_body3"); body4.setValue("[image]doc/logo.png[/image]"); //body4.setValue("[word]doc/1.doc[/word]");//還可嵌入其他Word文件 ParagraphFormat bodyPara4 = body4.getParagraphFormat(); bodyPara4.setAlignment(WdParagraphAlignment.wdAlignParagraphCenter); poCtrl1.setWriter(doc); poCtrl1.webOpen("doc/template.doc", OpenModeType.docNormalEdit,"張三");
5. 生成的文件效果如下:
6. 相關示例:拷貝PageOffice開發包中的 Samples4 文 件 夾 到 Tomcat 的 Webapps 目 錄 下 , 訪 問 : http://localhost:8080/Samples4/index.html,查看示例:三、7、完全編程實現動態生成Word文件