4

我正在尝试在多个页面上打印 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()

最后,当我返回 a 时,我将DocumentPage什么传递给三个几何参数pageSize和?bleedBoxcontentBox

谢谢 :)

4

2 回答 2

4

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

获取纸张的大小:

printDialog.PrintableAreaWidth, printDialog.PrintableAreaHeight

以及顶部和左侧边距:

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

我假设底部和右侧边距与顶部和左侧相同,尽管这可能不安全。

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

于 2010-07-08T10:48:01.600 回答
1

您是否考虑过使用 FlowDocument 而不是仅打印 Canvas?这里有一个创建和打印的好例子。

希望这将消除对大量数学的需求。

于 2010-07-07T12:55:17.300 回答