-
Notifications
You must be signed in to change notification settings - Fork 5
pdf打印
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();
}