[Develop] Windows Form 程式套用列印屬性直接列印檔案
這是一個工作上遇到的開發問題,當我們在開發Windows Form 的應用程式的時候,有時會有一些列印功能的開發。這一篇是在研究如何在開發Windows From程式時,我們可以直接在我們開發的程式上設定一些列印的參數。然後當我們按下列印的時候,直接由我們的Windows Form程式來驅動列印,並且不需要再經由Windows彈出的視窗來調整一些列印的參數。直接由程式帶入列印所需要的參數。這篇範例中我們使用微軟搭配 Microsoft Office Document Image Writer 來開發程式。
這邊我們來開發一個範例,我們在Windows Form 程式中開發當打開一個Word檔案時,按下列印,每張紙所含頁數為四頁,請參考下圖 :
請先參考 Document.PrintOut 的方法中的PrintZoomColumn 與 PrintZoomRow 參數 , 此參數組合可以控制在每一個列印版面中的頁面數. 例如一頁四張或是一頁八張.
PrintZoomColumn : 要讓 Word 在單頁上水平顯示的頁數。可以是 1、2、3 或 4。和 PrintZoomRow 引數搭配使用,在單一工作表上列印多頁。
PrintZoomRow : 要讓 Word 在單頁上垂直顯示的頁數。可以是 1、2 或 4。和 PrintZoomColumn 引數搭配使用,在單一工作表上列印多頁。
詳細資訊請參考下列網站:
Document.PrintOut 方法
http://msdn.microsoft.com/zh-tw/library/microsoft.office.tools.word.document.printout(v=VS.80).aspx
如何將分頁設定的參數帶入列印
1. 利用Visual Studio 2008 撰寫一個 Windows Form 的程式 , 並且在Windows Form 裡新增一個 Button 控制項.
2. 點兩下 button 新增一個 Button_click事件 , 並且撰寫以下程式碼 :
//設定取得Word檔案
object Missing = System.Reflection.Missing.Value;
object PrintFile = "D:\\testfile.doc"; //這邊設定取得您要列印的Word檔案,擷取檔案方式會因您的環境有差異,這部分再請您自行更改為符合您的環境需求.
Word.Application app = new Microsoft.Office.Interop.Word.ApplicationClass();
Word.Document doc = app.Documents.Add(ref PrintFile, ref Missing, ref Missing, ref Missing);
//列印參數設定
object Background = false;//true 表示當 Microsoft Office Word 列印文件時,繼續執行自訂程式碼。
object Range = Word.WdPrintOutRange.wdPrintAllDocument;//頁面範圍。
object OutputFileName = Missing;//如果 PrintToFile 為 true,這個引數會指定輸出檔的路徑和檔名。
object Items = Word.WdPrintOutItem.wdPrintDocumentContent;//要列印的項目。
object Copies = 1;//要列印的份數。
object Pages = "";//要列印的頁數和頁面範圍,以逗號分隔。例如,「2, 6-10」是表示列印第 2 頁以及第 6 到第 10 頁。
object PageType = Word.WdPrintOutPages.wdPrintAllPages;//要列印的頁面類型。
object PrintToFile = false;//true 表示將印表機指令傳送至檔案。請確定使用 OutputFileName 指定檔案名稱。
object Collate = true;//當列印文件的多份複本時,true 表示先列印文件的所有頁面,再列印下一份複本。(自動分頁)
object ManualDuplexPrint = false; // true 表示在沒有雙面列印套件的印表機上列印雙面文件
//當一張紙要列印四頁時設定即為 PrintZoomColumn = 2 (橫列印兩頁) PrintZoomRow = 2 (直列印兩頁) 。
//當一張紙要列印8頁時 設定即為 PrintZoomColumn = 2 (橫列印兩頁) PrintZoomRow = 4 (直列印兩頁) 。
//object PrintZoomColumn = 2; //要讓 Word 在單頁上水平顯示的頁數。可以是 1、2、3 或 4。和 PrintZoomRow 引數搭配使用,在單一工作表上列印多頁。
//object PrintZoomRow = 2; //要讓 Word 在單頁上垂直顯示的頁數。可以是 1、2 或 4。和 PrintZoomColumn 引數搭配使用,在單一工作表上列印多頁。
object PrintZoomColumn = 2; //要讓 Word 在單頁上水平顯示的頁數。可以是 1、2、3 或 4。和 PrintZoomRow 引數搭配使用,在單一工作表上列印多頁。
object PrintZoomRow = 2; //要讓 Word 在單頁上垂直顯示的頁數。可以是 1、2 或 4。和 PrintZoomColumn 引數搭配使用,在單一工作表上列印多頁。
object PrintZoomPaperWidth = 0; //Word 所調整列印頁面的寬度,以 Twip 為單位 (20 Twip = 1 點,72 點 = 1 英吋)。
object PrintZoomPaperHeight = 0; //Word 所調整列印頁面的高度,以 Twip 為單位 (20 Twip = 1 點,72 點 = 1 英吋)。
//執行文件列印方法
doc.PrintOut(ref Background, ref Missing, ref Range, ref OutputFileName, ref Missing, ref Missing, ref Items, ref Copies, ref Pages, ref PageType, ref PrintToFile, ref Collate, ref Missing, ref
ManualDuplexPrint, ref PrintZoomColumn, ref PrintZoomRow, ref PrintZoomPaperWidth, ref PrintZoomPaperHeight);
3. 測試程式:
1.將目前預設印表機設定為 Microsoft XPS Document Writer.
2.執行上一個步驟撰寫的Windows Form 程式
3.準備一份Word文件 , 內容至少有四頁分頁.
4.列印結果已經套用了一頁列印四個分頁的設定.
※ 若您希望分頁設定可以經由套用使用者的設定來動態調整,您可以在Windows Form 上設定下拉選項 , 然後將使用者的設定值分別指向 PrintZoomColumn 與 PrintZoomRow兩個參數設定.