如何打印空白页?
How do I print a blank page?
给定一个有效的 (System.Windows.Controls.
)PrintDialog
实例,从打印机中吐出空白页的最简单方法是什么?我有一个案例,我可以使用填充了可打印 material 的页面(实际上是 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
s,它就会打印。
好吧,你的问题有点宽泛,因为如果你的意思是 "print just a blank page" 那么它的意思与 "print one blank page of many pages" 不同。可能最好的方法是使用分页器,对于任何需要空白的页面,只需空白 canvas。例如:
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——但那是另一个话题。
给定一个有效的 (System.Windows.Controls.
)PrintDialog
实例,从打印机中吐出空白页的最简单方法是什么?我有一个案例,我可以使用填充了可打印 material 的页面(实际上是 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
s,它就会打印。
好吧,你的问题有点宽泛,因为如果你的意思是 "print just a blank page" 那么它的意思与 "print one blank page of many pages" 不同。可能最好的方法是使用分页器,对于任何需要空白的页面,只需空白 canvas。例如:
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——但那是另一个话题。