Skip to content
chen shucheng edited this page Jan 18, 2018 · 2 revisions
//WPF 打印控件 无弹框打印
//WPF中打印用到了 PrintDialog类。
//其中设置打印属性的是PrintTicket,管理打印机的是PrintQueue。
//实例如下:
 
public class PrintDialogHelper
{
    private const string PrintServerName = "YULIN-PC";
    private const string PrintName = "HP LaserJet M1522 series PCL6 Class Driver";
 
    public PrintDialogHelper()
    {
    }
 
    /// <summary>
    /// 打印控件
    /// </summary>
    /// <param name="element"></param>
    public void PrintVisual(FrameworkElement element)
    {
        var printDialog = new PrintDialog();
        SetPrintProperty(printDialog);
        var printQueue = SelectedPrintServer(PrintServerName, PrintName);
        if (printQueue != null)
        {
            printDialog.PrintQueue = printQueue;
            printDialog.PrintVisual(element, "");
        }
    }
 
    /// <summary>
    /// 查找并获取打印机
    /// </summary>
    /// <param name="printerServerName">服务器名字: Lee-pc</param>
    /// <param name="printerName">打印机名字:Hp laserjet m1522 mfp series pcl 6 </param>
    /// <returns></returns>
    public PrintQueue SelectedPrintServer(string printerServerName, string printerName)
    {
        try
        {
            var printers = PrinterSettings.InstalledPrinters;//获取本机上的所有打印机
            PrintServer printServer = null;
 
            foreach (string printer in printers)
            {
                if (printer.Contains(printerName))
                    printServer = new PrintServer("\\\\" + printerServerName);
            }
 
            if (printServer == null) return null;//没有找到打印机服务器
 
            var printQueue = printServer.GetPrintQueue(printerName);
            return printQueue;
        }
        catch (Exception)
        {
            return null;//没有找到打印机
        }
    }
 
    /// <summary>
    /// 设置打印格式
    /// </summary>
    /// <param name="printDialog">打印文档</param>
    /// <param name="pageSize">打印纸张大小 a4</param>
    /// <param name="pageOrientation">打印方向 竖向</param>
    public void SetPrintProperty(PrintDialog printDialog, PageMediaSizeName pageSize = PageMediaSizeName.ISOA4, PageOrientation pageOrientation = PageOrientation.Portrait)
    {
        var printTicket = printDialog.PrintTicket;
        printTicket.PageMediaSize = new PageMediaSize(pageSize);//A4纸
        printTicket.PageOrientation = pageOrientation;//默认竖向打印
    }
}
private void Printpdf(string filePath, string printerName, string pageSize)
        {
            doc = new PdfDocument();
            dialogPrint = new PrintDialog();
            doc.LoadFromFile(filePath);

            dialogPrint.AllowPrintToFile = false;
            dialogPrint.AllowSomePages = true;
            dialogPrint.PrinterSettings.MinimumPage = 1;
            dialogPrint.PrinterSettings.MaximumPage = doc.Pages.Count;
            dialogPrint.PrinterSettings.FromPage = 1;
            dialogPrint.PrinterSettings.ToPage = doc.Pages.Count;
            dialogPrint.PrinterSettings.PrinterName = printerName;

            //设置打印的起始页码
            doc.PrintFromPage = dialogPrint.PrinterSettings.FromPage;

            //设置打印的终止页码
            doc.PrintToPage = dialogPrint.PrinterSettings.ToPage;


            doc.PageSettings.Size = pageSize.ToUpper().Equals("A5") ? PdfPageSize.A5 : PdfPageSize.A4;
            //选择打印机
            doc.PrinterName = dialogPrint.PrinterSettings.PrinterName;


            PrintDocument printDoc = doc.PrintDocument;
            dialogPrint.Document = printDoc;

            PaperSize p = null;
            foreach (PaperSize ps in printDoc.PrinterSettings.PaperSizes)
            {
                if (ps.PaperName.Equals(pageSize.ToUpper()))
                {
                    p = ps;
                    break;
                }
            }

            printDoc.PrintController = new StandardPrintController();
            if (p != null)
            {
                printDoc.DefaultPageSettings.PaperSize = p;
            }
            printDoc.Print();

        }
Clone this wiki locally