利用Aspose.Words.dll導出Word代替NPOI


許久沒來寫博客了,已至於登錄博客園的密碼都忘卻了。

時間過的真快,最近再做一個招聘管理系統,其中用到了導出Word文檔的功能,嘗試了各種方法,遇到了各種問題。不過最后還是解決了導出Word的問題。

一、針對導出Word文檔的功能,采用的幾個方案:

 1.預置好Word文檔模板,采用加載替換文檔內容標簽的方式實現。
 
  采用這種方案可以借助兩個第三方組件來實現,分別如下:

  (1)、借助Microsoft.Office.Interop.Word組件實現。
  (2)、借助NPOI實現。
  (3)、借助Aspose.Words實現。

 2.繪制方案,即利用第三方組件現實Word文件的繪制。
 
  繪制方案的難點如下:
  (1)、段落、表格的處理。
  (2)、樣式的處理。

二、實現

  方案選擇:最終權衡利弊,還是采用替換的方式更為合理,由於導出功能的使用量並不大,而且並發導出的情況也極少發生。所以在可行性方面,該方案可行。

  1.首先采用的是借助Microsoft.Office.Interop.Word組件實現。
     
    采用此方案實現的相關代碼網上有很多很多,大家可以搜下。利用此方法我實現了替換導出,但是問題來了,由於服務器上由於盜版審查,不允許安裝盜版軟件,而且Microsoft.Office.Interop.Word是需要在服務器上安裝Office的,所以被系統管理員Pass,經多方溝通后,還是不允許安裝。無奈只能另想辦法。


  2.借NPOI實現。
    NPOI是開源的框架,免費,但是由於對.net開發來說,NPOI對Excel的支持那是相當的強大的,唯獨對Word的支持還不是那么強大,而且最新NPOI2.1的說明文檔和案例又少之又少。不過還是硬着頭皮利用NPOI分別實現了下模板標簽替換和word繪制,最終都以失敗告終。替換后導出的word怎么也打不找,提示錯誤。繪制的方法成功的導出的Word,但是樣式實在是整不了。

  3.借助Aspose.Words實現
    在經過上述嘗試和實現后,思維陷入了崩潰的境地,好在同事提醒,說有個Aspose.Words可以一試。查了下Aspose.Words,發現了收費的,可然在還是有破解版的。考慮到是內部用的,而且不是商業用途,所以試着實現了下。

    利用Aspose.Words實現官網上有相關的案例,支持各種輸出。大家可以百度下。

    我這里要強調的是模板的制做,我采用的是替換 “文檔部件”來實現的。

    具體操作見圖:
    (1).模板制做


   

    插入文檔部件,仔細看,你會在圖的最右側看到 “文檔部件”

  

   選擇“域”項 

    

    域名選擇“MergeField”

 

    

    域名置為"UserName"。

      

   

     上圖就是模板的效果,當然,你可以自己美化和調整,到此我們的模板就制做完成了,接下來就是寫程序執行替換了。

 

     (2).替換

   

private void ExportByAsPose(string vouchId)
        {
            try
            {
		//模板路徑
                string tempPath = ConfigurationManager.AppSettings["RmaApplyTemplate"];
                string outputPath = "D:/招聘需求申請表.doc";
                var doc = new Document(tempPath); //載入模板
                //提供數據源
                String[] fieldNames = new String[] { 
                    "UserName"
                 };


				Object[] fieldValues = new Object[] { "Jerry" };
                

                //合並模版,相當於頁面的渲染
                doc.MailMerge.Execute(fieldNames, fieldValues);



                //保存合並后的文檔
                //doc.Save(outputPath);
                //在WebForm中,保存文檔到流中,使用Response. BinaryWrite輸出該文件
                var docStream = new MemoryStream();
                doc.Save(docStream, SaveOptions.CreateSaveOptions(SaveFormat.Doc));
                Response.ContentType = "application/msword";
                Response.AddHeader("content-disposition", "attachment;  filename=招聘需求申請表.doc");
                Response.BinaryWrite(docStream.ToArray());
                Response.End();
                //File.Delete("D:/招聘需求申請表.docx");                 //清除服務端生成的word文件
            }
            catch (Exception e)
            {
                Response.Write(e.Message + "  請聯系管理員!");
            }



        }

 

  好了,到此完成了Word文檔的導出。 給自己留個印象,特此小記。

     希望對大家有所幫助。

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM