[英]Print several BitmapSources with different page orientations
在C#中,我在同一文檔中有一個BitmapSource集合。 這些BitmapSource每個都具有獨立的頁面方向,我想在同一打印作業中打印它們,並保持為每個頁面設置的頁面方向。
今天,我無法執行此操作,因為我使用的是PrintDialog類,並且每個BitmapSource都添加到了FixedDocument內部的FixedPage中-使用這種方法,我只能將頁面方向設置為整個文檔(每一個方向打印票)。 我應該怎么做才能在一個打印作業中打印多個具有不同頁面方向的BitmapSource(在PrintDialog類中,僅使用一張打印票)?
由於我只有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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.