C# 打印PDF文件之使用不同打印機打印所有頁面或部分頁面


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();
            }
        }
    }
}

  

以上是我親測以后覺得可用的方案,放在這里供大家參考,如果有什么不周到的地方,希望大家不吝賜教,謝謝!


免責聲明!

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



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