Java動態生成word文檔(圖文並茂)

不少狀況下,軟件開發者須要從數據庫讀取數據,而後將數據動態填充到手工預先準備好的Word模板文檔裏,這對於大批量生成擁有相同格式排版的正式文件很是有用,這個功能應用PageOffice的基本動態填充功能便可實現。但如果用戶想動態生成一個沒有固定模版的公文時,換句話說,沒有辦法事先準備一個固定格式的模板時,就須要開發人員在後臺用代碼實現Word文檔的從零到圖文並茂的動態生成功能了。這裏的「零」指的是Word空白文檔。html

  那如何實現Word文檔的從無到有呢,下面就把利用PageOffice實現這一功能的過程介紹一下。例如,想生成一個Word文檔,裏面的內容爲:標題(粗體、黑體、字體大小爲20、居中顯示)、第一段內容(內容(略)、字體傾斜、字體大小爲十、中文「楷體」、英文「Times New Roman」、紅色、最小行間距、左對齊、首行縮進)、第二段內容(內容(略)、字體大小爲十二、黑體、1.5倍行間距、左對齊、首行縮進)、第三段內容(內容(略)、字體大小爲1四、華文彩雲、2倍行間距、左對齊、首行縮進)、第四段內容插入一張圖片。web

  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. 生成的文件效果以下:app

  

  6. 相關示例:拷貝PageOffice開發包中的 Samples4 文 件 夾 到 Tomcat 的 Webapps 目 錄 下 , 訪 問 : http://localhost:8080/Samples4/index.html,查看示例:3、七、徹底編程實現動態生成Word文件字體

相關文章
相關標籤/搜索