從空白生成文件的代碼:
WordDocument doc = new WordDocument(); //設置內容標題 //創建DataRegion對象,PO_title為自動添加的書簽名稱,書簽名稱需以“PO_”為前綴,切書簽名稱不能重復 //三個參數分別為要新插入書簽的名稱、新書簽的插入位置、相關聯的書簽名稱(“[home]”代表Word文檔的頁首) DataRegion title = doc.createDataRegion("PO_title", DataRegionInsertType.After, "[home]"); //給DataRegion對象賦值 title.setValue("JAVA中編程實例\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(true); body.getFont().setItalic(true); body.getFont().setSize(10); //設置中文字體名稱 body.getFont().setName("楷體"); //設置英文字體名稱 body.getFont().setNameAscii("Times New Roman"); body.getFont().setColor(Color.red); //給DataRegion對象賦值 body.setValue("首先,我向大家介紹一下套接字的概念。\n"); //創建ParagraphFormat對象 ParagraphFormat bodyPara = body.getParagraphFormat(); //設置段落的行間距、對齊方式、首行縮進 bodyPara.setLineSpacingRule(WdLineSpacing.wdLineSpaceAtLeast); bodyPara.setAlignment(WdParagraphAlignment.wdAlignParagraphLeft); bodyPara.setFirstLineIndent(21);
在一個word模板的文件中插入一個圖片、word和Excel文檔的代碼:
WordDocument doc = new WordDocument(); //插入圖片 // PO_body3是word模板中已存在的一個書簽 DataRegion body4 = doc.createDataRegion("PO_body4", DataRegionInsertType.After, "PO_body3"); body4.setValue("[image]doc/logo.png[/image]"); //嵌入其他Word文件 //body4.Value = "[word]doc/1.doc[/word]"; //嵌入其他Excel文件 //body4.Value = "[excel]doc/1.xls[/excel]"; ParagraphFormat bodyPara4 = body4.getParagraphFormat(); bodyPara4.setAlignment(WdParagraphAlignment.wdAlignParagraphCenter);
操作word中的表格代碼:
WordDocument doc = new WordDocument(); //打開數據區域 DataRegion dataRegion = doc.openDataRegion("PO_regTable"); //打開table,openTable(index)方法中的index代表Word文檔中table位置的索引,從1開始 Table table = dataRegion.openTable(1); //給table中的單元格賦值, openCellRC(int,int)中的參數分別代表第幾行、第幾列,從1開始 table.openCellRC(3, 1).setValue("A公司"); table.openCellRC(3, 2).setValue("開發部"); table.openCellRC(3, 3).setValue("李清"); //插入一行,insertRowAfter方法中的參數代表第幾行,從1開始 table.insertRowAfter(3); table.openCellRC(4, 1).setValue("B公司"); table.openCellRC(4, 2).setValue("銷售部"); table.openCellRC(4, 3).setValue("張三");
給word添加一個水印,對於實現這個效果來說,PageOffice確實已經做到簡單到極致,如果用iText那個方案,需要寫至少十幾行代碼吧(由於篇幅的限制,這里就不寫了,有興趣的話可以網上搜索一下相關的資料),但 PageOffice的代碼只用下面一句:
WordDocument doc =new WordDocument(); //添加水印 ,設置水印的內容 doc.getWaterMark().setText("北京某某公司");
優點有以下幾點:不限制於Windows平台;接口和對象的設計就是針對Office文件生成專門優化設計的,代碼寫起來比較舒服可讀性強;編程的工作量更小,如果開發中也利用了Word模板,那開發量可以更低;生成的文件是地地道道的Word格式,生成的文件效果比較完美;也不需要像POI那樣必須對doc和docx格式分別寫代碼;最后一點:服務器端不需要安裝Office,不使用服務器端資源,所以不需要處理服務器端文件生成時的並發問題,也就是很多用戶同時訪問系統生成文件時服務器的壓力問題。請注意這點,采用這個方案的話,文件是在客戶端生成的,調用的是客戶端的資源,完全符合分布式計算的思想。
