在C#中,我有一个位于同一文档中的BitmapSource集合。这些BitmapSources每个都有独立的页面方向,我想在同一个打印作业中打印它们,保持每页的页面方向设置。
今天,我无法做到这一点,因为我使用的是PrintDialog类,并且每个BitmapSource都被添加到FixedDocument中的FixedPage中 - 通过这种方法,我只能将页面方向设置为整个文件(每张打印票一个方向)。如何在单个打印作业中打印多个具有不同页面方向的BitmapSource(在PrintDialog类中,只使用一张打印票据)?
答案 0 :(得分:3)
我不能发表评论,因为我只有11名代表,但我会尝试提供我可能有帮助的信息。
一些事情:它可能取决于您创建FixedDocument
和生成FixedPage
的方式。如果您首先生成FixedPage
然后将其添加到FixedDocument
,我可以想到您可以尝试的一件事。
此外,还取决于您打印页面的方式,打印每个页面或是否要调用打印一次,以及打印整个文档。
无论如何,一种方法是在将固定页面添加到文档之前调整它们的大小。如果您使用打印对话框,请使用打印票据属性并将控件或您拥有的内容扩展到所需的大小。
这对我有用:
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。