標籤:現在 資料庫資料 exec 沒有 顏色 模版 ocr poc mod
在網上找了好多天將資料庫中資訊匯出到word中的解決方案,現在將這幾天的總結分享一下。總的來說,java匯出word大致有5種解決方案:
1:Jacob是Java-COM Bridge的縮寫,它在Java與微軟的COM組件之間構建一座橋樑。通過Jacob實現了在Java平台上對微軟Office的COM介面進行調用。
優點:調用微軟Office的COM介面,產生的word檔案格式規範。
缺點:伺服器只能是windows平台,不支援unix和linux,且伺服器上必須安裝微軟Office。
2:Apache POI包括一系列的API,它們可以操作基於MicroSoft OLE 2 Compound Document Format的各種格式檔案,可以通過這些API在Java中讀寫Excel、Word等檔案。
優點:跨平台支援windows、unix和linux。
缺點:相對與對word檔案的處理來說,POI更適合excel處理,對於word實現一些簡單檔案的操作湊合,不能設定樣式且產生的word檔案格式不夠規範。
3:Java2word是一個在java程式中調用 MS Office Word 文檔的組件(類庫)。該組件提供了一組簡單的介面,以便java程式調用他的服務作業Word 文檔。 這些服務包括: 開啟文檔、建立文檔、尋找文字、替換文字,插入文字、插入圖片、插入表格,在書籤處插入文字、插入圖片、插入表格等。
優點:足夠簡單,操作起來要比FreeMarker簡單的多。
缺點:沒有FreeMarker強大,不能夠根據模版產生Word文檔,word的文檔的樣式等資訊都不能夠很好的操作。
4:FreeMarker產生word文檔的功能是由XML+FreeMarker來實現的。先把word檔案另存新檔xml,在xml檔案中插入特殊的字串預留位置,將xml翻譯為FreeMarker模板,最後用java來解析FreeMarker模板,編碼調用FreeMarker實現文本替換並輸出Doc。
優點:比Java2word功能強大,也是純Java編程。
缺點:產生的檔案本質上是xml,不是真正的word檔案格式,有很多常用的word格式無法處理或表現怪異,比如:超鏈、換行、亂碼、部分產生的檔案打不開等。
5:PageOffice產生word檔案。PageOffice封裝了微軟Office繁瑣的vba介面,提供了簡潔易用的Java編程對象,支援產生word檔案,同時實現了線上編輯word文檔和讀取word文檔內容。
優點:跨平台支援windows、unix和linux,產生word檔案格式標準,支援文本、圖片、表格、字型、段落、顏色、超鏈、頁首等各種格式的操作,支援多word合并,無需處理並發,不耗費伺服器資源,運行穩定。
缺點:必須在用戶端組建檔案(可以不顯示介面),不支援純伺服器端組建檔案。
綜合以上資料的參考,和網上的一些意見,最後選擇了,第5種用PageOffice做匯出方案。
下面是基本的例子,以實現簡單的word匯出:
讀取資料庫表中的資訊記錄填充到一個請假條的模板中,替換“部門、姓名、原因、天數、日期”幾個資料位元置的常值內容。
主要代碼:
// 聲明變數儲存從資料庫中讀取的資料 String docName = "", docDept = "", docCause = "", docNum = "", docDate = ""; // 資料庫資料讀取操作(不同的資料庫用不同的代碼) ResultSet rs = stmt.executeQuery("select * from leaveRecord where ID = " + id); if (rs.next()) { docName = rs.getString("Name"); docDept = rs.getString("Dept"); docCause = rs.getString("Cause"); docNum = rs.getString("Num"); docDate = rs.getString("SubmitTime"); } rs.close(); //建立PageOffice的WordDocument對象,操作Word檔案 WordDocument doc = new WordDocument(); doc.openDataRegion("PO_name").setValue(docName); doc.openDataRegion("PO_dept").setValue(docDept); doc.openDataRegion("PO_cause").setValue(docCause); doc.openDataRegion("PO_num").setValue(docNum); doc.openDataRegion("PO_date").setValue(docDate); //建立PageOfficeCtrl對象開啟檔案 PageOfficeCtrl poCtrl1 = new PageOfficeCtrl(request); poCtrl1.setServerPage(request.getContextPath()+"/poserver.zz"); //此行必須 //擷取資料對象 poCtrl1.setWriter(doc); // 開啟文檔 poCtrl1.webOpen("doc/template.doc", OpenModeType.docReadOnly, "Tom");
產生的檔案效果:
[原創]java匯出word的5種方式