在WPF中使用PrintDialog.PrintVisual方法進行打印


1、概述

使用PrintDialog. PrintVisual方法進行打印時,只需要提供WPF中的可視元素類型對象即可,比如UserControl或者Window。這種打印方法的好處是所見即所得,WPF會以圖像的方式將其打印出來。此外,還可以通過數據綁定的方式進行動態數據打印。

2、注意事項

(1) 如果控件在沒有顯示的情況下打印,需要在內存中對其進行刷新。

(2) 如果需要對其旋轉,則需要設置控件的HorizontalAlignment和VerticalAlignment屬性為左上角對齊,而且在刷新UI時將寬高對調,否則會出現打印不全的情況。

(3) 對於控件中的數據綁定,如果顯示有延遲,可以在打印之前對控件執行UpdateLayout操作。

3、參考

打印參數設置等思路可以參考:TSC TTP-244Pro標簽打印機打印步驟小結

4、代碼示例 

public void Print(UserControl userControl, bool rorate90, string printer, int copyCount)
{
    //旋轉
    if (rorate90)
    {
        var rotateTransform = new RotateTransform(90);
        userControl.LayoutTransform = rotateTransform;
    }

    //刷新UI
    var size = rorate90
        ? new Size(userControl.Width, userControl.Height)
        : new Size(userControl.Height, userControl.Width);
    userControl.Measure(size);
    userControl.Arrange(new Rect(new Point(0, 0), size));

    //設置對齊方式
    userControl.HorizontalAlignment = HorizontalAlignment.Left;
    userControl.VerticalAlignment = VerticalAlignment.Top;

    //更新布局
    userControl.UpdateLayout();

    //開始打印
    Print(userControl, printer, "test print", copyCount);
}

/// <summary>
/// 打印
/// </summary>
/// <param name="userControl">要打印的控件</param>
/// <param name="printer">打印機名稱</param>
/// <param name="description">打印描述</param>
/// <param name="copyCount">打印個數</param>
public static void Print(UserControl userControl, string printer, string description, int copyCount)
{
    var localPrintServer = new LocalPrintServer();
    var printQueue = localPrintServer.GetPrintQueue(printer);
    if (printQueue.IsInError)
    {
        throw new Exception("打印機處於錯誤狀態");
    }

    var printDialog = new PrintDialog
    {
        PrintQueue = printQueue, //打印隊列
        PrintTicket = {CopyCount = copyCount} //打印個數
    };

    //設置紙張大小
    var pageWidth = (int) Math.Ceiling(printDialog.PrintableAreaWidth);
    var pageHeight = (int) Math.Ceiling(printDialog.PrintableAreaHeight);
    printDialog.PrintTicket.PageMediaSize = new PageMediaSize(pageWidth, pageHeight);

    //打印
    printDialog.PrintVisual(userControl, description);
}


免責聲明!

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



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