2010年6月11日 星期五

線上列印-Word

線上列印-Word


這個功能呢~~
主要就是可以讓使用者在線上列印我們Web應用程式產生的Word。
而不用讓使用者自行下載下來後,再開啟Word來列印。

首先,必須先「加入參考
之後,便會再「Web.Config」上,看到自動幫你新增的一行組件資訊

<add assembly="Microsoft.Office.Interop.Word, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"/></assemblies>

那這邊,也來說明一下目前我的程式流程!

1 載入指定目標路徑的「範本檔案
2 將範本檔案進行修改:(使用第三方元件:Aspose.Word)
  • 從資料庫撈對應的資料至Word裡對應的「功能變數」
  • 再另存修改後的檔案至指定路徑
3 由指定路徑載入Word檔進行列印作業
4 刪除指定路徑的Word檔

以下的程式碼,為執行列印作業的範例:
主要方法是在「PrintOut」,它的列印格式可以很活。詳細可參考Document.PrintOut 方法


        //物件宣告
        Microsoft.Office.Interop.Word.Application app = null;
        Microsoft.Office.Interop.Word.Document doc = null;
        object oMissing = System.Reflection.Missing.Value;
        object templateFile = "指定路徑:欲列印的檔案";

        //繫結Word檔
        app = new Microsoft.Office.Interop.Word.ApplicationClass();
        doc = app.Documents.Add(ref templateFile, ref oMissing, ref oMissing, ref oMissing);

        //列印參數設定
        object oBackground = false;//true 表示當 Microsoft Office Word 列印文件時,繼續執行自訂程式碼。
        object oRange = WdPrintOutRange.wdPrintAllDocument;//頁面範圍。
        object oOutputFileName = oMissing;//如果 PrintToFile 為 true,這個引數會指定輸出檔的路徑和檔名。
        object oItems = WdPrintOutItem.wdPrintDocumentContent;//要列印的項目。
        object oCopies = 1;//要列印的份數。
        object oPages = "";//要列印的頁數和頁面範圍,以逗號分隔。例如,「2, 6-10」是表示列印第 2 頁以及第 6 到第 10 頁。
        object oPageType = WdPrintOutPages.wdPrintAllPages;//要列印的頁面類型。
        object oPrintToFile = false;//true 表示將印表機指令傳送至檔案。請確定使用 OutputFileName 指定檔案名稱。
        object oCollate = true;//當列印文件的多份複本時,true 表示先列印文件的所有頁面,再列印下一份複本。(自動分頁)
        object oManualDuplexPrint = false;
        object oPrintZoomColumn = 0;
        object oPrintZoomRow = 0;
        object oPrintZoomPaperWidth = 0;
        object oPrintZoomPaperHeight = 0;
        object oTrue = true;
        object oFalse = false;
    
        
        //釋放物件用
        object m_sc = 0;
        object m_of = oMissing;
        object m_rd = oMissing;


        //執行列印
        doc.PrintOut(ref oBackground, ref oFalse, ref oRange, ref oOutputFileName, ref oMissing, ref oMissing, ref oItems, ref oCopies, ref oPages, ref oPageType, ref oPrintToFile, ref oCollate, ref oMissing, ref oManualDuplexPrint, ref oPrintZoomColumn, ref oPrintZoomRow, ref oPrintZoomPaperWidth, ref oPrintZoomPaperHeight);

        
        // 關閉 Word 物件
        if (app != null)
        {
            app.Quit(ref m_sc, ref m_of, ref m_rd);
        }
        // 釋放文件
        if (doc != null)
        {
            doc = null;
        }
        // 釋放 Word 物件
        app = null;



請注意~~~
這個是因為IIS在執行MS Word時,發生權限不足的問題~
必須在Web.Config中,設定讓ASP.NET實作「本機模擬」

<compilation debug="true">

若要進一步設定,可參考如何在 ASP.NET 應用程式中實作模擬

當然,指定模擬的話,需要注意,在「主控台根目錄/元件服務/電腦/我的電腦(右鍵內容)/COM安全設定/存取權限
裡面有指定的帳戶。

開啟主控台根目錄方式:
1 執行:DCOMCNFG.EXE
2 控制台->系統管理工具->元件服務