2017-03-02 15:17:30java
使用的jar包是poi 3.13 實現對word的存入,字體、顏色、大小的控制apache
測試類:app
1 package poi.test; 2 3 public class WordMain1 { 4 /** 5 * 1.對於word,使用XWPFDocument操做07以上的doc或者docx都沒有問題,而且必須是07或者以上的電腦上生成的word 6 * 若是是WordExtractor或者HWPFDocument只能操做03如下的word,而且只能是03如下電腦生成的word 7 * 8 * @param args 9 */ 10 11 public static void main(String[] args) { 12 String path = "e:\\poi\\"; 13 String fileName = "poi.docx"; 14 String filePath = path + fileName; 15 //建立word 16 WordUtils1.createWord(path,fileName); 17 //寫入數據 18 String data = "本文是以poi3.9讀寫2010word、2010excel、2010ppt,記錄學習的腳步相應的功能在代碼都有註釋,就不解釋了 詳情能夠參看poi3.9的文檔主測試函數 TestMain.java"; 19 WordUtils1.writeDataDocx(filePath,data,true,12); 20 //WordUtils.writeDataDoc(filePath,data); 21 22 //讀取數據 23 //String contentWord=WordUtils.readDataDoc(filePath); 24 String contentWord=WordUtils1.readDataDocx(filePath); 25 System.out.println("word的內容爲:\n"+contentWord); 26 System.out.println(); 27 } 28 29 }
工具類:函數
1 package poi.test; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileNotFoundException; 6 import java.io.FileOutputStream; 7 import java.io.IOException; 8 import java.io.InputStream; 9 import java.io.OutputStream; 10 import org.apache.poi.xwpf.usermodel.XWPFDocument; 11 import org.apache.poi.xwpf.usermodel.XWPFParagraph; 12 import org.apache.poi.xwpf.usermodel.XWPFRun; 13 14 //建立.doc後綴的word 15 public class WordUtils1 { 16 public static void createWord(String path,String fileName){ 17 //判斷目錄是否存在 18 File file=new File(path); 19 //exists()測試此抽象路徑名錶示的文件或目錄是否存在。 20 //mkdir()建立此抽象路徑名指定的目錄。 21 //mkdirs()建立此抽象路徑名指定的目錄,包括全部必需但不存在的父目錄。 22 if(!file.exists()) file.mkdirs(); 23 //由於HWPFDocument並無提供公共的構造方法 因此沒有辦法構造word 24 //這裏使用word2007及以上的XWPFDocument來進行構造word 25 @SuppressWarnings("resource") 26 XWPFDocument document=new XWPFDocument(); 27 OutputStream stream=null; 28 try { 29 stream = new FileOutputStream(new File(file, fileName)); 30 document.write(stream); 31 } catch (FileNotFoundException e) { 32 e.printStackTrace(); 33 } catch (IOException e) { 34 e.printStackTrace(); 35 }finally{ 36 if(stream != null); 37 try { 38 stream.close(); 39 } catch (IOException e) { 40 e.printStackTrace(); 41 } 42 } 43 } 44 45 //向word中寫入數據 46 /** 47 * 有些方法須要傳特殊類型的參數的時候,通常能夠用★靜態的接口.參數★來傳參 48 * @param path 49 * @param data 50 */ 51 public static void writeDataDocx(String path,String data,boolean jiacu,int size){ 52 InputStream istream=null; 53 OutputStream ostream=null; 54 try { 55 istream = new FileInputStream(path); 56 ostream = new FileOutputStream(path); 57 @SuppressWarnings("resource") 58 XWPFDocument document=new XWPFDocument(); 59 //添加一個段落 60 XWPFParagraph p1=document.createParagraph(); 61 //setAlignment()指定應適用於此段落中的文本的段落對齊方式。CENTER LEFT... 62 //p1.setAlignment(ParagraphAlignment.LEFT); 63 //p1.setBorderBetween(Borders.APPLES); 64 //p1.setBorderBottom(Borders.APPLES); 65 //p1.setBorderLeft(Borders.APPLES);指定應顯示在左邊頁面指定段周圍的邊界。 66 //p1.setBorderRight(Borders.ARCHED_SCALLOPS);指定應顯示在右側的頁面指定段周圍的邊界。 67 //p1.setBorderTop(Borders.ARCHED_SCALLOPS);指定應顯示上方一組有相同的一組段邊界設置的段落的邊界。這幾個是對段落之間的格式的統一,至關於格式刷 68 //p1.setFirstLineIndent(99);//---正文寬度會稍微變窄 69 //p1.setFontAlignment(1);//---段落的對齊方式 1左 2中 3右 4往上 左 不可寫0和負數 70 //p1.setIndentationFirstLine(400);//---首行縮進,指定額外的縮進,應適用於父段的第一行。 71 //p1.setIndentationHanging(400);//---首行前進,指定的縮進量,應經過第一行回到開始的文本流的方向上移動縮進從父段的第一行中刪除。 72 //p1.setIndentationLeft(400);//---整段縮進(右移)指定應爲從左到右段,該段的內容的左邊的緣和這一段文字左邊的距和右邊文本邊距和左段權中的那段文本的右邊緣之間的縮進,若是省略此屬性,則應假定其值爲零。 73 //p1.setIndentationRight(400);//---指定應放置這一段,該段的內容從左到右段的右邊緣的正確文本邊距和右邊文本邊距和左段權中的那段文本的右邊緣之間的縮進,若是省略此屬性,則應假定其值爲零。 74 //p1.setIndentFromLeft(400);//---整段右移 75 //p1.setIndentFromRight(400); 76 //p1.setNumID(BigInteger.TEN); 77 //p1.setPageBreak(true);//--指定當渲染此分頁視圖中的文檔,這一段的內容都呈如今文檔中的新頁的開始。 78 //p1.setSpacingAfter(6);//--指定應添加在文檔中絕對單位這一段的最後一行以後的間距。 79 //p1.setSpacingAfterLines(6);//--指定應添加在此線單位在文檔中的段落的最後一行以後的間距。 80 //p1.setSpacingBefore(6);//--指定應添加上面這一段文檔中絕對單位中的第一行的間距。 81 //p1.setSpacingBeforeLines(6);//--指定應添加在此線單位在文檔中的段落的第一行以前的間距。 82 //p1.setSpacingLineRule(LineSpacingRule.AT_LEAST);//--指定行之間的間距如何計算存儲在行屬性中。 83 //p1.setStyle("");//--此方法提供了樣式的段落,這很是有用. 84 //p1.setVerticalAlignment(TextAlignment.CENTER);//---指定的文本的垂直對齊方式將應用於此段落中的文本 85 //p1.setWordWrapped(true);//--此元素指定是否消費者應中斷超過一行的文本範圍,經過打破這個詞 (打破人物等級) 的兩行或經過移動到下一行 (在詞彙層面上打破) 這個詞的拉丁文字。 86 XWPFRun r1=p1.createRun();//p1.createRun()將一個新運行追加到這一段 87 //setText(String value)或 88 //setText(String value,int pos) 89 //value - the literal text which shall be displayed in the document 90 //pos - - position in the text array (NB: 0 based) 91 r1.setText(data); 92 //r1.setTextPosition(20);//這個至關於設置行間距的,具體這個20是怎麼算的,不清楚,此元素指定文本應爲此運行在關係到周圍非定位文本的默認基線升降的量。不是真正意義上的行間距 93 //---This element specifies the amount by which text shall be ★raised or lowered★ for this run in relation to the default baseline of the surrounding non-positioned text. 94 //r1.setStrike(true);//---設置刪除線的,坑人!!! 95 //r1.setStrikeThrough(true);---也是設置刪除線,可能有細微的區別吧 96 //r1.setEmbossed(true);---變的有重影(變黑了一點) 97 //r1.setDoubleStrikethrough(true);---設置雙刪除線 98 //r1.setColor("33CC00");//---設置字體顏色 ★ 99 //r1.setFontFamily("fantasy"); 100 //r1.setFontFamily("cursive");//---設置ASCII(0 - 127)字體樣式 101 r1.setBold(jiacu);//---"加黑加粗" 102 r1.setFontSize(size);//---字體大小 103 //r1.setImprinted(true);//感受與setEmbossed(true)相似,有重影 104 //r1.setItalic(true);//---文本會有傾斜,是一種字體? 105 //r1.setShadow(true);//---文本會變粗有重影,與前面兩個有重影效果的方法感受沒什麼區別 106 //r1.setSmallCaps(true);//---改變了 英文字母 的格式 107 //r1.setSubscript(VerticalAlign.BASELINE);//---valign垂直對齊的 108 //r1.setUnderline(UnderlinePatterns.DASH);//--填underline type設置下劃線 109 //document.createTable(2, 2);//--建立一個制定行列的表 110 //document.enforceReadonlyProtection();//--強制執行制度保護 111 112 /** 113 * r1.setDocumentbackground(doc, "FDE9D9");//設置頁面背景色 114 r1.testSetUnderLineStyle(doc);//設置下劃線樣式以及突出顯示文本 115 r1.addNewPage(doc, BreakType.PAGE); 116 r1.testSetShdStyle(doc);//設置文字底紋 117 */ 118 document.write(ostream); 119 System.out.println("建立word成功"); 120 } catch (FileNotFoundException e) { 121 e.printStackTrace(); 122 } catch (IOException e) { 123 e.printStackTrace(); 124 }finally{ 125 if(istream!=null){ 126 try { 127 istream.close(); 128 } catch (IOException e) { 129 e.printStackTrace(); 130 } 131 } 132 if(ostream!=null){ 133 try { 134 ostream.close(); 135 } catch (IOException e) { 136 e.printStackTrace(); 137 } 138 } 139 } 140 } 141 142 //向word中寫入數據 143 // public static void writeDataDoc(String path,String data){ 144 // OutputStream ostream=null; 145 // try { 146 // ostream = new FileOutputStream(path); 147 // ostream.write(data.getBytes()); 148 // } catch (FileNotFoundException e) { 149 // e.printStackTrace(); 150 // } catch (IOException e) { 151 // e.printStackTrace(); 152 // }finally{ 153 // if(ostream != null){ 154 // try { 155 // ostream.close(); 156 // } catch (IOException e) { 157 // e.printStackTrace(); 158 // } 159 // } 160 // } 161 // } 162 163 //讀取數據 docx 164 public static String readDataDocx(String filePath) { 165 String content=""; 166 InputStream istream=null; 167 try { 168 istream = new FileInputStream(filePath); 169 @SuppressWarnings("resource") 170 XWPFDocument document=new XWPFDocument(istream); 171 //getLastParagraph()返回包含頁眉或頁腳的文本的段落 172 //getText()返回文檔全部文本 173 content=document.getLastParagraph().getText();//★★★★★ 174 } catch (FileNotFoundException e) { 175 e.printStackTrace(); 176 } catch (IOException e) { 177 e.printStackTrace(); 178 }finally{ 179 if(istream != null){ 180 181 } 182 } 183 return content; 184 } 185 }