我需要打印非常大且复杂的对象 - virtualizet 在二维矩阵中,左侧和顶部有两个表格,中间有两个表格代表表格的交叉点。每个表可以有超过 5000 条记录。所以我对所有这些事情进行了控制。它的工作相当不错。但是客户想要打印它。当矩阵对于一页来说太大时,我应该分成和平并打印每个部分。
我可以按纸张大小划分矩阵并为每个部分构建流文档。但它的气味有很多问题。特别是表格具有自定义列数,因此不能将所有列放在一个文档中。
所以,我希望存在任何最简单的方法来实现这一点。(从excel打印除外)
我需要打印非常大且复杂的对象 - virtualizet 在二维矩阵中,左侧和顶部有两个表格,中间有两个表格代表表格的交叉点。每个表可以有超过 5000 条记录。所以我对所有这些事情进行了控制。它的工作相当不错。但是客户想要打印它。当矩阵对于一页来说太大时,我应该分成和平并打印每个部分。
我可以按纸张大小划分矩阵并为每个部分构建流文档。但它的气味有很多问题。特别是表格具有自定义列数,因此不能将所有列放在一个文档中。
所以,我希望存在任何最简单的方法来实现这一点。(从excel打印除外)
执行此操作的“简单”方法是创建一个与文档大小相同的位图,使用 将文档中的每个控件绘制到此位图RenderTargetBitmap
,将位图划分为页面矩形的宽度和高度的图块,然后将每个图块绘制到打印机。
不要那样做。
你很快就会发现屏幕上看起来不错的东西在纸上看起来并不好;字体像素化,渐变抖动,文本被截断,文档中的空白区域导致文本在疯狂的位置打印。WPF 控件仅可从 UI 线程获得,并且大量绘制它们可能会导致您的 UI 阻塞。
反而; 利用打印机功能。你有三张桌子?分别打印每个表格。与其尝试绘制 UI,不如DrawingVisual
为每个单元格或图形创建一个。布置页面上的每个单元格,测试它是否超出边距。如果是这样,请将其添加到水平(如果它超出右边距)或垂直(如果它超出底部边距)斜率列表。绘制完第一页后,在水平斜面上绘制所有视觉效果。继续这样做,直到水平斜面是空的,然后用垂直斜面再次做这一切。然后再下一张桌子。DrawingVisual
s 不需要 UI 线程,因此您可以在后台执行此操作。
DocumentPaginator
可能对此有支持;我没试过。祝你好运。