2014-11-21 33 views
0

在C#中,我有一個位於同一文檔中的BitmapSource的集合。這些BitmapSources每個都有獨立的頁面方向,並且我希望在相同的打印作業中打印它們,爲每個頁面設置頁面方向。以不同的頁面方向打印多個BitmapSources

今天,我無法做到這一點,因爲我正在使用PrintDialog類,並且每個BitmapSource都被添加到FixedDocument中的固定頁面上 - 使用這種方法,我只能將頁面方向設置爲整個文檔(每張打印票一個方向)。我應該如何在一個打印作業中打印多個具有不同頁面方向的BitmapSources(在PrintDialog類中,只使用一個打印工單)?

回答

3

我不能留下評論,因爲我只有11個代表,但我會盡量給你我可能有幫助的信息。

有幾件事情:它可能取決於您如何創建FixedDocument並生成FixedPage s。如果您是第一次生成FixedPage,然後將其添加到FixedDocument,我可以考慮一件您可以嘗試的事情。

另外,這取決於您打印頁面的方式,打印每頁還是要打印一次,然後打印整個文檔。

無論如何,一種方法是在將固定頁面添加到文檔之前調整固定頁面的大小。如果您使用打印對話框,請獲取打印票據屬性,並根據您需要的尺寸縮放您的控件或您的內容。

這爲我工作:在Windows資源管理器預覽

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(); 
} 

而且tmp.xps樣子:

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。