我正在使用PrintDocument
实施silverlight打印。我的UI是使用XamlReader
生成的运行时,它解析了我在db中存储的xaml
。
这是代码:
string str = sb.ToString();
newUI = XamlReader.Load(sb.ToString()) as FrameworkElement;
newUI.DataContext = ReportData;
grdPreviewArea.Children.Add(newUI);
grdPreviewArea.Height = pageHeight;
grdPreviewArea.Width = pageWidth;
Grid.SetColumn(newUI, 1);
Grid.SetRow(newUI, 1);
现在打印我在我的打印事件句柄中将newUI
设置为e.PageVisual
。
如果渲染的UI适合单页,这可以正常工作,但如果它不适合单页,我无法打印第二页。
答案 0 :(得分:1)
首先,您需要计算出需要多少页面
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
希望这有帮助