C# 打印PDF文件之使用不同打印機打印所有頁面或部分頁面
最近在逛國外各大編程社區論壇的時候,發現很多人都在問一個關於PDF文件打印的問題:打印時如何選擇非默認打印機並設置打印頁面的范圍。而一般情況下,打印時選擇的打印機是默認打印機,打印頁面范圍是所有頁面,如果要選擇其他打印機或打印部分頁面,需要對代碼進行一定的設置。通過在百度和各大網站上查找資料,終於在MSDN上找到了一個解決方案,我把它在這里分享出來,讓其他有同樣需求的朋友少走點冤枉路。
在該解決方案中我使用了一個免費的PDF控件,感興趣的博友可以從Codeplex官網:https://freepdf.codeplex.com上下載。
下面是該解決方案的詳細代碼分步解析:
第一步:添加項目引用。
安裝控件后,創建一個新的項目,找到控件的安裝目錄,在項目的“解決方案”窗口右擊->添加引用,選擇和項目.NET Framework版本對應的dll文件進行添加;
如下圖:
第二步:使用命名空間。
在該方案中,我使用的命名空間如下:
using Spire.Pdf; using System.Windows.Forms; using System.Drawing.Printing;
第三步:創建一個新的PDF文檔,並加載待打印的PDF文件。
PdfDocument doc = new PdfDocument(); doc.LoadFromFile("sample.pdf");
如果需要使用默認打印機打印所有頁面,請看第四步。如果需要使用其他打印機並設置打印頁面范圍,請看第五步。
第四步:使用默認打印機打印所有頁面。
doc.PrintDocument.Print();
第五步:選擇打印機和設置打印頁面范圍。
PrintDialog dialogPrint = new PrintDialog(); dialogPrint.AllowPrintToFile = true; dialogPrint.AllowSomePages = true; dialogPrint.PrinterSettings.MinimumPage = 1; dialogPrint.PrinterSettings.MaximumPage = doc.Pages.Count; dialogPrint.PrinterSettings.FromPage = 1; dialogPrint.PrinterSettings.ToPage = doc.Pages.Count; if (dialogPrint.ShowDialog() == DialogResult.OK) { //設置打印的起始頁碼 doc.PrintFromPage = dialogPrint.PrinterSettings.FromPage; //設置打印的終止頁碼 doc.PrintToPage = dialogPrint.PrinterSettings.ToPage; //選擇打印機 doc.PrinterName = dialogPrint.PrinterSettings.PrinterName; PrintDocument printDoc = doc.PrintDocument; dialogPrint.Document = printDoc; printDoc.Print(); }
運行項目,輸出的效果圖如下(打印機和打印頁面范圍可以自己選擇):
全部代碼如下:
using Spire.Pdf; using System.Windows.Forms; using System.Drawing.Printing; namespace PrintPDF { class Program { static void Main(string[] args) { PdfDocument doc = new PdfDocument(); doc.LoadFromFile("sample.pdf"); //選擇默認打印機打印所有頁面 //doc.PrintDocument.Print(); //選擇打印機並設置打印頁面范圍 PrintDialog dialogPrint = new PrintDialog(); dialogPrint.AllowPrintToFile = true; dialogPrint.AllowSomePages = true; dialogPrint.PrinterSettings.MinimumPage = 1; dialogPrint.PrinterSettings.MaximumPage = doc.Pages.Count; dialogPrint.PrinterSettings.FromPage = 1; dialogPrint.PrinterSettings.ToPage = doc.Pages.Count; if (dialogPrint.ShowDialog() == DialogResult.OK) { doc.PrintFromPage = dialogPrint.PrinterSettings.FromPage; doc.PrintToPage = dialogPrint.PrinterSettings.ToPage; doc.PrinterName = dialogPrint.PrinterSettings.PrinterName; PrintDocument printDoc = doc.PrintDocument; dialogPrint.Document = printDoc; printDoc.Print(); } } } }
以上是我親測以后覺得可用的方案,放在這里供大家參考,如果有什么不周到的地方,希望大家不吝賜教,謝謝!