[原創]java匯出word的5種方式

來源:互聯網
上載者:User

標籤:現在   資料庫資料   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種方式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.