因为我只有 11 个代表,所以我还不能发表评论,但我会尽力为您提供我所拥有的信息,这可能会有所帮助。
有几件事:这可能取决于您如何创建FixedDocument
和生成FixedPage
s。如果您首先生成 aFixedPage
然后将其添加到 a FixedDocument
,我可以想到您可以尝试的一件事。
此外,这取决于您打印页面的方式、打印每一页的方式,还是您想调用 print 一次,然后打印整个文档。
无论如何,一种方法是在将固定页面添加到文档之前调整它们的大小。如果您使用打印对话框,请获取打印票属性并将您的控件或您拥有的控件缩放到它们需要的大小。
这对我有用:
private void Button_Click_1(object sender, RoutedEventArgs e)
{
var fp1 = new FixedPage() {Height=1056, Width =816};
var g = new Grid();
g.Children.Add(new Rectangle { Height = 1056, Width = 816, Fill = Brushes.Orange });
fp1.Children.Add(g);
var fp2 = new FixedPage() { Height = 816, Width = 1056 };
var g1 = new Grid();
g1.Children.Add(new Rectangle { Height = 816, Width = 1056, Fill = Brushes.Pink });
fp2.Children.Add(g1);
var fd = new FixedDocument();
fd.Pages.Add(new PageContent{Child = fp1 });
fd.Pages.Add(new PageContent{Child = fp2 });
var d = new XpsDocument(@"C:\users\me\desktop\tmp.xps",
FileAccess.ReadWrite);
var doc =
XpsDocument.CreateXpsDocumentWriter(d);
doc.Write(fd);
d.Close();
}
Windows 资源管理器预览中的tmp.xps如下所示:

假设您不想将其打印到文件中,或者您也想将其发送到打印机。
var hardCopy = fd.DocumentPaginator;
var pd = new PrintDialog();
if(pd.ShowDialog() == true)
{
pd.PrintQueue.AddJob("My Document",
@"C:\users\me\desktop\tmp.xps",
false);
}
注意:只有使用 XPS 设备打印时,打印输出才会有正确的方向。看PrintQueue.IsXpsDevice
如果这不符合您的需要,您将不得不编写自己的DocumentPaginator
,以便您处理每一页的打印。您在这里的一种选择是在调用时转换您的视觉效果/页面DocumentPaginator.GetPage(int index)
。如果您更改任何 UI 属性,请记住为每个页面调用 Measure、Arrange 和 UpdateLayout。