我正在尝试打印一个报告,其中我们在xaml中有几个不同的组件。 根据我的发现,在打印时,您必须将每个UIelement视为一个UIelement,因此如果desiredSize大于AvailableSize,则必须激活标记HasMorePages。
但问题来了。
我的用户可以在网格上写出他/她想要的文本,因此,根据数量,行会扩展并离开可打印区域,如下图所示。
我考虑过将一整页放到网格中,但它仍然很大,这让我进入了一个循环,其中DesizedSize总是比PrintableArea大。
我的代码与您在搜索多页打印时在互联网上找到的任何来源没有太大差别。
它基于此http://eswarbandaru.blogspot.com.au/2011/02/print-mulitple-pages-using-silverlight.html,但使用的是Stackpanels而不是Textboxes。
有什么想法吗? 提前谢谢。
答案 0 :(得分:0)
首先,您需要计算出需要多少页面
Dim pagesNeeded As Integer = Math.Ceiling(gridHeight / pageHeight)'获取所需页数
然后,一旦将第一页发送到打印机,您需要将该数据移出视图并将新数据放入视图中以备打印。我这样做是通过将整个数据集转换为图像/ UI元素,然后我可以相应地调整Y值以在屏幕上显示下一组所需数据。
transformGroup.Children.Add(New。TranslateTransform(){。Y = - (pageIndex * pageHeight)})
然后,一旦达到所需页数,请告诉打印机停止
If pagesLeft <= 0 Then
e.HasMorePages = False
Exit Sub
Else
e.HasMorePages = True
End If
或者,如果这工作太多,您只需缩放所有音符以适应屏幕即可。可能再次转换为UI元素。
查看此链接以转换为UI元素。
http://www.codeproject.com/Tips/248553/Silverlight-converting-to-image-and-printing-an-UI
希望这有帮助