如何在wpf中打印非常大的对象

时间:2012-10-31 21:09:38

标签: .net wpf printing flowdocument

我需要打印非常大且复杂的对象 - 在二维矩阵中的虚拟化,左边和顶部有两个表,中间表示表的交叉点。 每个表可以有超过5000条记录。所以我控制了所有这些事情。 它的工作非常好。但客户想要打印它。当矩阵对于一页太大时,我应该进入和平并打印每个部分。

我可以按纸张大小分配矩阵,并为每个部分构建流程文档。但它闻起来有很多问题。特别是那些表具有列的自定义计数,因此所有列都不能放在一个文档中。

所以,我希望以任何最简单的方式实现这一点。 (除了从excel打印)

1 个答案:

答案 0 :(得分:0)

执行此操作的“简单”方法是创建一个与文档大小相同的位图,使用RenderTargetBitmap将文档中的每个控件绘制到此位图,将位图划分为图块的宽度和高度矩形,并将每个图块绘制到打印机。

不要那样做。

你很快就会发现屏幕上看起来不错的东西在纸上看起来不太好;字体是像素化的,渐变是抖动的,文本被截断,文档中的空白区域导致文本在疯狂的位置打印。 WPF控件只能从UI线程获得,并且大量绘制它们会导致UI被阻止。

相反;利用打印机功能。你有三张桌子?分别打印每个表。不是尝试绘制UI,而是为每个单元格或图形创建DrawingVisual。在页面上布置每个单元格,测试它是否超出边距。如果是这样,将其添加到水平(如果它离开右边距)或垂直(如果它离开底部边缘)slop列表。绘制完第一页后,在水平斜面上绘制所有视觉效果。继续这样做,直到水平坡度为​​空,然后再用垂直坡度再做一遍。然后再次为下一个表。 DrawingVisual不需要UI线程,因此您可以在后台执行此操作。

DocumentPaginator可能对此有所支持;我没试过。祝你好运。