WPF DocumentPaginator和Document Page意外裁剪
-
02-10-2019 - |
题
我正在尝试通过多个页面打印WPF画布。
我非常满意将其缩放以适合页面宽度,然后剪切并翻译每个页面的画布;所有非常简单的数学。
我不明白的是如何获得可打印区域的尺寸,以及如何告诉打印机在哪里打印。无论我尝试什么,似乎正在使用的值是纸的大小,因此,我会随着打印机无法直接打印到纸的边缘而发生裁剪。
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.
但是,底部和右边缘呢?我在哪里找到此信息?
应该什么 PageSize
属性 DocumentPaginator
被设置为?我应该从 capabilities.PageImageableArea
?或做 dialog.Print()
函数设置此,我只需要从中读取 GetPage()
?
最后,当我返回 DocumentPage
, ,我将如何传递给三个几何论点 pageSize
, bleedBox
和 contentBox
?
谢谢 :)
解决方案
好的,似乎打印总是从 (0, 0)
(左上)纸。
用以下方式获得纸张的大小
printDialog.PrintableAreaWidth, printDialog.PrintableAreaHeight
以及顶部和左边的边缘:
var printCapabilities = printDialog.PrintQueue.GetPrintCapabilities(printDialog.PrintTicket);
printCapabilities.PageImageableArea.OriginWidth, printCapabilities.PageImageableArea.OriginHeight
我以为底部和右边缘与顶部和左侧相同,尽管这可能不安全。
您必须按照往常来缩放和剪辑画布,然后应用 TranslateTransform
边距的大小将内容移入可打印区域。
其他提示
您是否考虑使用Flowdocument而不是仅打印画布?创建和打印有一个很好的例子 这里.
希望这将否定对数学的大量需求。
不隶属于 StackOverflow