我正在尝试在多页上打印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.但是,底部和右边距又如何呢?我在哪里可以找到这些信息?
DocumentPaginator的PageSize属性应该设置为什么?我应该从capabilities.PageImageableArea设置这个吗?或者是dialog.Print()函数设置的,我只需要在GetPage()中读取它
最后,当我返回一个DocumentPage时,我应该向三个几何参数pageSize、bleedBox和contentBox传递什么
谢谢:)
发布于 2010-07-08 18:48:02
好的,似乎打印总是从纸张的(0, 0) (左上角)开始。
使用以下命令获取纸张的大小:
printDialog.PrintableAreaWidth, printDialog.PrintableAreaHeight上边距和左边距分别为:
var printCapabilities = printDialog.PrintQueue.GetPrintCapabilities(printDialog.PrintTicket);
printCapabilities.PageImageableArea.OriginWidth, printCapabilities.PageImageableArea.OriginHeight我假设底部和右侧边距与顶部和左侧相同,尽管这可能不安全。
您必须像往常一样缩放和裁剪画布,然后应用边距大小的TranslateTransform将内容移入可打印区域。
发布于 2010-07-07 20:55:17
您是否考虑过使用FlowDocument而不仅仅是打印画布?这里有一个创建和打印Here的很好的例子。
希望这会消除对大量数学知识的需求。
https://stackoverflow.com/questions/3194197
复制相似问题