首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF DocumentPaginator和DocumentPage意外裁剪

WPF DocumentPaginator和DocumentPage意外裁剪
EN

Stack Overflow用户
提问于 2010-07-07 19:22:40
回答 2查看 2.9K关注 0票数 4

我正在尝试在多页上打印WPF画布。

我非常喜欢缩放它以适应页面宽度,然后为每一页裁剪和转换画布;所有这些都是非常简单的数学运算。

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

代码语言:javascript
复制
var capabilities = printDialog.GetPrintCapabilities(dialog.PrintTicket);

功能具有以下属性:

代码语言:javascript
复制
capabilities.PageImageableArea.ExtentWidth
// "Gets the width of the imageable area"

什么是“可想象的”区域?这是我可以在纸上放置内容的区域吗?我想是因为:

代码语言:javascript
复制
capabilities.PageImageableArea.OriginWidth
// Gets the distance from the left edge of the page to the imageable area.

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

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

最后,当我返回一个DocumentPage时,我应该向三个几何参数pageSizebleedBoxcontentBox传递什么

谢谢:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-08 18:48:02

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

使用以下命令获取纸张的大小:

代码语言:javascript
复制
printDialog.PrintableAreaWidth, printDialog.PrintableAreaHeight

上边距和左边距分别为:

代码语言:javascript
复制
var printCapabilities = printDialog.PrintQueue.GetPrintCapabilities(printDialog.PrintTicket);
printCapabilities.PageImageableArea.OriginWidth, printCapabilities.PageImageableArea.OriginHeight

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

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

票数 4
EN

Stack Overflow用户

发布于 2010-07-07 20:55:17

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

希望这会消除对大量数学知识的需求。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3194197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档