1. 程式人生 > >POI根據word模板替換匯出setText內容不能換行問題。

POI根據word模板替換匯出setText內容不能換行問題。

//word模板路徑
String inFile = rootPath+"報告.docx";
//word輸出路徑
String outFile = rootPath + "輸出報告.docx";

XWPFDocument doc;
//params 引數 
Map<String, String> params = new HashMap<String, String>();
params.put("titleOne","1、重新組織全科護理人員學習口服藥的執行流程並作考核。\r2、加強病人安全管理相關制度的學習、提高安全生產意識。\r3、組長、護長加強制度落實的監管,持續跟進一週責任護士發放口服藥的流程執行情況,並不定期進行隨檢。");
 try {
	InputStream is = new FileInputStream(inFile);  
	doc = new XWPFDocument(OPCPackage.open(is));
	Set<Entry<String, String>> set = params.entrySet();
	List<XWPFParagraph> list = doc.getParagraphs();
	//para 要替換的段落 
	for(XWPFParagraph para:list){
		List<XWPFRun> runs = para.getRuns();
		for (int i=0; i<runs.size(); i++) {
			XWPFRun run = runs.get(i);  
			if("".equals(replaceText(run.text(), set))){
				run.setText(replaceText(run.text(), set),0);
			}else{
				String runText = replaceText(run.text(), set);
				if(runText.indexOf("\r")>0) {
					String[] text = runText.split("\r");
					//直接呼叫XWPFRun的setText()方法設定文字時,在底層會重新建立一個XWPFRun,把文字附加在當前文字後面,  
                                        //所以我們不能直接設值,需要先刪除當前run,然後再自己手動插入一個新的run。  
					para.removeRun(i);
					run = para.insertNewRun(i);
					for(int f=0;f<text.length;f++) {
						if(f==0){
							//此處不縮排因為word模板已經縮進了。
							run.setText(text[f].trim());
						}else{
							run.addCarriageReturn();//硬回車
							//注意:wps換行首行縮排是三個空格符,office要的話可以用 run.addTab();縮排或者四個空格符
							run.setText("   "+text[f].trim());
						}
					}
					//設定字型
					run.setFontFamily("宋體");
					//字型大小
					run.setFontSize(12);
					//行間距
					run.setTextPosition(22);
				}else {
					run.setText(replaceText(run.text(), set),0);
					run.setTextPosition(22);
			   }
			}
		}	
	}
	OutputStream os = new FileOutputStream(outFile);  
	doc.write(os);  
	close(os);  
	close(is);  
} catch (Exception e) {  
	throw e;
}  
此文給java用poi操作word模板是出現不能換行的朋友一個建議,僅供參考。如有問題請留言。