我正在尝试通过多个页面打印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, bleedBoxcontentBox?

谢谢 :)

有帮助吗?

解决方案

好的,似乎打印总是从 (0, 0) (左上)纸。

用以下方式获得纸张的大小

printDialog.PrintableAreaWidth, printDialog.PrintableAreaHeight

以及顶部和左边的边缘:

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

我以为底部和右边缘与顶部和左侧相同,尽管这可能不安全。

您必须按照往常来缩放和剪辑画布,然后应用 TranslateTransform 边距的大小将内容移入可打印区域。

其他提示

您是否考虑使用Flowdocument而不是仅打印画布?创建和打印有一个很好的例子 这里.

希望这将否定对数学的大量需求。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top