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();
}
}
}
}
以上是我親測以后覺得可用的方案,放在這里供大家參考,如果有什么不周到的地方,希望大家不吝賜教,謝謝!
