如何打印空白页?

时间:2015-03-09 18:54:24

标签: c# .net wpf printing printdialog

鉴于有效(System.Windows.Controls.PrintDialog实例,从打印机中吐出空白页的最简单方法是什么?我有一个案例,我可以成功打印一个填充了可打印材料的页面(实际上是Grid),但是如果我设置了所有UIElement.Visibility = Visibility.Hidden;,我可以看到打印队列正在使用生成的文档,但是没有确认打印机,显示屏或任何机械机芯的收据。

编辑:打印代码:

MyPageToPrint myPtP = new MyPageToPrint();

foreach (UIElement elt in myPtP.MainGrid.Children)
{
    elt.Visibility = Visibility.Hidden;
}

printDialog.PrintVisual(myPtP.MainGrid, "Print blank page");
myPtP.Close();

这导致打印机没有明显的确认,但如果我操作UIElement,则会打印出来。

1 个答案:

答案 0 :(得分:1)

嗯,你的问题有点宽泛,因为如果你的意思是"只打印一个空白页面"然后,这意味着不同于"打印许多页面的空白页面"。可能最好的方法是使用分页器,对于任何想要空白的页面,只需要一个空白画布。例如:

class Paginator : DocumentPaginator
{
    public override DocumentPage GetPage(int pageNumber)
    {
        if (pageNumber == 0)
        {
            Canvas printCanvas = new Canvas();
            printCanvas.Measure(PageSize);
            return new DocumentPage(printCanvas);
        }
        else
        {
            // deal with other pages
            throw new NotImplementedException();
        }
    }

    public override bool IsPageCountValid
    {
        get { return true; }
    }

    public override int PageCount
    {
        get { return 1; }
    }

    public override Size PageSize
    {
        get
        {
            return new Size(8.5,11);
        }
        set
        {
            throw new NotImplementedException();
        }
    }

    public override IDocumentPaginatorSource Source
    {
        get { return null; }
    }
}

然后,在您的打印点击处理程序中,您可能会遇到以下情况:

private void printButton_Click(object sender, RoutedEventArgs e)
{
    var dialog = new PrintDialog();
    if (dialog.ShowDialog() == true)
    {
        var paginator = new Paginator();
        dialog.PrintDocument(paginator, "Print demo");
    }
}

为了简洁起见,我使用了代码隐藏和点击处理程序;它建议您在ViewModel中使用它并通过命令将其连接到View - 但这是一个不同的主题。