【问题标题】:How do I print a blank page?如何打印空白页?
【发布时间】:2015-03-09 18:54:24
【问题描述】:

给定一个有效的 (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();

这导致打印机没有明显的确认,但如果我确实操作了UIElements,它就会打印出来。

【问题讨论】:

  • 请包含一些相关代码。换句话说,具体来说你尝试了什么
  • 已添加@NotMe 代码示例

标签: c# .net wpf printing printdialog


【解决方案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 ——但这是一个不同的主题。

【讨论】:

  • 我希望不必创建一个全新的DocumentPaginator,但看起来这就是这里所需要的。
  • 如果你有不止一页,我看不出有什么办法。
猜你喜欢
  • 2015-05-18
  • 1970-01-01
  • 2018-11-20
  • 1970-01-01
  • 1970-01-01
  • 2020-01-27
  • 1970-01-01
  • 2018-09-23
  • 1970-01-01
相关资源
最近更新 更多