WPF備忘錄(6)WPF實現打印功能


  在WPF 中可以通過PrintDialog 類方便的實現應用程序打印功能,本文將使用一個簡單實例進行演示。首先在VS中編輯一個圖形(如下圖所示)。

Design

     將需要打印的內容放入同一個<Canvas>中,並起名為“printArea”,打印按鍵一般不是我們希望打印出來的內容,則將其放在<Canvas>外面。

<Window x:Class="WpfPrint.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="500">
    <Grid>
        <Canvas x:Name="printArea">
            <Ellipse Canvas.Left="137" Canvas.Top="92" Height="100" Stroke="Black" Width="200">
                <Ellipse.Fill>
                    <LinearGradientBrush>
                        <GradientStop Color="#FFAD0FC7" Offset="0" />
                        <GradientStop Color="#FF3359AD" Offset="1" />
                    </LinearGradientBrush>
                </Ellipse.Fill>
            </Ellipse>
            <TextBlock FontSize="20" FontWeight="Bold" Foreground="White" Canvas.Left="151" Canvas.Top="129" Height="33"> Visual Studio 2010</TextBlock>
            <Image Source="vs2010.jpg" Height="52" Width="90" Canvas.Left="388" Canvas.Top="0" />
        </Canvas>
        <Button Content="Print" Click="Button_Click" Height="23" Margin="195,268,190,20" />
    </Grid>
</Window>

接下來編寫Button_Click 事件,由於我們要打印<Canvas>所包含的內容,所以要通過PrintVisual 打印Visual 對象。

private void Button_Click(object sender, RoutedEventArgs e) { PrintDialog dialog = new PrintDialog(); if (dialog.ShowDialog() == true) { dialog.PrintVisual(printArea, "Print Test"); } }

運行程序,點擊“Print”按鍵,彈出打印設置窗口,打印到XPS看看效果。

Print

如下圖所示,打印結果中只有<Canvas>中的內容。

XPS

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;//默認豎向打印
} }

 


免責聲明!

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



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