插件Spire.PDF幫你高效搞定PDF列印

Spire.PDF介紹

Spire.PDF是一個專業的PDF組件,能夠獨立地創建、編寫、編輯、操作和閱讀PDF文件,支援 .NET、Java、WPF和Silverlight。Spire.PDF的PDF API擁有豐富的功能,如安全設置(包括數字簽名)、PDF文本/附件/圖片提取、PDF文件合併/拆分、元數據更新、章節和段落優化、圖形/影像描繪和插入、表格創建和處理、數據導入等等。

本文將介紹以下幾種常見方式:

  • 使用默認印表機列印PDF文檔

  • 使用虛擬印表機(Microsoft XPS Document Writer)列印PDF文檔

  • 指定印表機及PDF文檔列印頁碼範圍

  • 靜默列印PDF文檔

  • 雙面列印PDF文檔

  • 完整列印過程

使用默認印表機

//載入PDF文檔
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("Test.pdf");
//使用默認印表機列印文檔所有頁面
doc.PrintDocument.Print();

使用虛擬印表機(Microsoft XPS Document Writer)

//載入PDF文檔
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("Test.pdf");

//選擇Microsoft XPS Document Writer印表機
doc.PrintDocument.PrinterSettings.PrinterName = "Microsoft XPS Document Writer";

//列印PDF文檔到XPS格式
doc.PrintDocument.PrinterSettings.PrintToFile = true;
doc.PrintDocument.PrinterSettings.PrintFileName = "PrintToXps.xps";
doc.PrintDocument.Print();

指定印表機及文檔列印頁碼範圍

//載入PDF文檔
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("Test.pdf");

//設置列印對話框屬性
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();
}

靜默列印

//載入PDF文檔
var doc = new PdfDocument();
doc.LoadFromFile("Test.pdf");

//靜默列印PDF文檔
PrintDocument printDoc = doc.PrintDocument;
printDoc.PrintController = new StandardPrintController(); 
printDoc.Print();

雙面列印

//載入PDF文檔
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("Test.pdf");

//判斷印表機是否支援雙面列印
bool isDuplex = doc.PrintDocument.PrinterSettings.CanDuplex;
if (isDuplex)
{
    //如果支援則設置雙面列印模式,可選:Default/Simplex/Horizontal/Vertical
    doc.PrintDocument.PrinterSettings.Duplex = Duplex.Default;
    //列印文檔
    doc.PrintDocument.Print();
}

完整列印過程

        /// <summary>
        /// 列印介面
        /// </summary>
        //入參:訂單號、待列印文件全路徑、單雙面、顏色、紙張大小、紙張克重、列印範圍、列印份數等,後續待補充
        public void Print(string filepath, string frompage, string topage, string copies, string duplex, string color, string papersizes, string print)
        {
            try
            {
                if (print == "")
                {
                    MessageBox.Show("請選擇印表機!");
                    return;
                }

                if (filepath == "")
                {
                    MessageBox.Show("請選擇列印文件路徑!");
                    return;
                }

                PdfDocument doc = new PdfDocument();
                doc.LoadFromFile(filepath);

                doc.PrintSettings.PrinterName = print;

                //設置文檔列印頁碼範圍
                doc.PrintSettings.SelectPageRange(Convert.ToInt32(frompage), Convert.ToInt32(topage));
                //列印不連續的頁面
                //doc.PrintSettings.SelectSomePages(new int[] { 1, 3, 5, 7 });

                //判斷印表機是否支援雙面列印
                if (doc.PrintSettings.CanDuplex)
                {
                    //如果支援則設置雙面列印模式,可選:Default/Simplex/Horizontal/Vertical
                    switch (duplex)
                    {
                        case "雙面列印":
                            doc.PrintSettings.Duplex = Duplex.Default;
                            break;
                        case "雙面水平列印":
                            doc.PrintSettings.Duplex = Duplex.Horizontal;
                            break;
                        case "單面列印":
                            doc.PrintSettings.Duplex = Duplex.Simplex;
                            break;
                        case "雙面垂直列印":
                            doc.PrintSettings.Duplex = Duplex.Vertical;
                            break;
                        default:
                            doc.PrintSettings.Duplex = Duplex.Simplex;
                            break;
                    }
                }

                if (color == "黑白")
                {
                    //黑白列印PDF文檔
                    doc.PrintSettings.Color = false;
                }
                else
                {
                    doc.PrintSettings.Color = true;
                }


                //設置列印份數為1份
                doc.PrintSettings.Copies = Convert.ToInt16(copies);

                PaperSize p = null;
                //遍歷印表機紙盒裡面的紙張,找到需要的A3
                foreach (PaperSize ps in printDoc.PrinterSettings.PaperSizes)
                {
                    if (ps.PaperName.Equals(papersizes))
                    {
                        p = ps;
                        break;
                    }
                }
                //設置列印的紙張大小為A3
                doc.PrintSettings.PaperSize = p;


                //靜默列印PDF文檔
                doc.PrintSettings.PrintController = new StandardPrintController();

                doc.PrintSettings.EndPrint += PrintSettings_EndPrint;


                //使用默認印表機列印文檔所有頁面
                doc.Print();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void PrintSettings_EndPrint(object sender, PrintEventArgs e)
        {
            MessageBox.Show("列印成功!");
        }

支援選擇印表機、紙張設置、雙面列印、彩色列印、列印份數和列印頁碼範圍等等都可以進行控制!

如有編程方面的交流可加群:186841119,一起相互交流學習進步!

 

Tags: