您可以将视觉对象打印到 XPS。然而,据我了解,它是your管理页面的工作。如果您的视觉效果太大而无法放在一个页面上,您需要找到一种方法将其拆分到多个页面上。
我在这里发布的源代码打印了多页的项目列表:
https://bitbucket.org/paulstovell/samples/src/a323f0c65ea4/XPS%20Report%20Generator/ https://bitbucket.org/paulstovell/samples/src/a323f0c65ea4/XPS%20Report%20Generator/
如果您能找到一种方法将视觉效果拆分为页面(可能创建 3 个表单,每个表单 15 个项目),则可以使用以下方法:
using (var doc = new XpsDocument("P:\\Test2.xps", FileAccess.Write))
{
var writer = XpsDocument.CreateXpsDocumentWriter(doc);
var collator = writer.CreateVisualsCollator();
collator.BeginBatchWrite();
collator.Write(form1);
collator.Write(form2);
collator.Write(form3);
collator.EndBatchWrite();
}
var doc2 = new XpsDocument("P:\\Test2.xps", FileAccess.Read);
var seq = doc2.GetFixedDocumentSequence();
var window = new Window();
window.Content = new DocumentViewer {Document = seq};
window.ShowDialog();
另请注意,如果您要新建视觉对象并打印它,则需要先调整其大小,否则可能会出现空屏幕。下面是生成一页数据的示例(当然您会更改尺寸以适合 A4 纸)。
private StackPanel CreatePage()
{
var panel = new StackPanel();
panel.Width = 1000;
panel.Height = 1000;
for (var i = 0; i < 10; i++)
{
panel.Children.Add(new TextBlock() {Text = "Item " + i});
}
panel.Measure(new Size(1000, 1000));
panel.Arrange(new Rect(0, 0, 1000, 1000));
return panel;
}