2010-07-07 84 views
4

我试图在多个页面上打印一个WPF画布。WPF DocumentPaginator和DocumentPage意外裁剪

我很高兴将它缩放到适合页面宽度,然后剪切和翻译每个页面的画布;所有非常简单的数学。

我不明白的是如何获得可打印区域的尺寸,以及如何告诉打印机打印到哪里。无论我尝试什么,看来我使用的值都是纸张的大小,因此当打印机不能正确打印到纸张边缘时,我会发生裁剪。

var capabilities = printDialog.GetPrintCapabilities(dialog.PrintTicket); 

能力具有以下属性:

capabilities.PageImageableArea.ExtentWidth 
// "Gets the width of the imageable area" 

什么是 “成像” 区域?是我可以放入内容的纸张上的区域?我想是因为:

capabilities.PageImageableArea.OriginWidth 
// Gets the distance from the left edge of the page to the imageable area. 

但是,底部和右边距呢?我在哪里可以找到这些信息?

DocumentPaginatorPageSize属性应该设置为?我应该从capabilities.PageImageableArea设置这个吗?或者dialog.Print()函数设置了这个,我只需要从GetPage()中读取它?

最后,当我返回一个DocumentPage时,我会传递给三个几何参数pageSize,bleedBoxcontentBox

谢谢:)

回答

4

好吧,似乎打印始终发生在文章的(0, 0)(左上角)。

拿到试卷与大小:

printDialog.PrintableAreaWidth, printDialog.PrintableAreaHeight 

,并与顶部和左侧边距:

var printCapabilities = printDialog.PrintQueue.GetPrintCapabilities(printDialog.PrintTicket); 
printCapabilities.PageImageableArea.OriginWidth, printCapabilities.PageImageableArea.OriginHeight 

我以为,底部和右侧利润率一样的顶部和左侧,尽管这可能不安全。

您必须像平常一样缩放和剪裁画布,然后应用边距的大小将内容移动到可打印区域。

1

你有没有看使用的FlowDocument,而不是只打印画布?有一个创建和打印Here的好例子。

希望这会否定大量数学的需要。

+0

如何从画布上获取流文档? – 2010-07-07 14:55:13

+0

忘记试图打印画布并创建一个FlowDocument来绑定数据。 esentially在FlowDocument中重新创建画布中的内容。 – Blounty 2010-07-07 21:40:24