2011-09-12 48 views
2

我試圖用WPF的PrintDialog類(PresentationFramework.dll中的命名空間System.Windows.Controls,v4.0.30319)進行打印。這是我使用的代碼:PrintDialog/XPS Document Writer中忽略的紙張大小

private void PrintMe() 
{ 
    var dlg = new PrintDialog(); 

    if (dlg.ShowDialog() == true) 
    { 
     dlg.PrintVisual(new System.Windows.Shapes.Rectangle 
     { 
      Width = 100, 
      Height = 100, 
      Fill = System.Windows.Media.Brushes.Red 
     }, "test"); 
    } 
} 

問題是無論我選擇「Microsoft XPS文檔作家」什麼紙張尺寸,所產生的XPS,總是有「」的寬度和高度紙張類型:

這是XAML代碼,我可以找到XPS包內:

<FixedPage ... Width="816" Height="1056">

回答

2

在打印對話框中改變紙張大小不僅影響打印標籤,而不是固定頁面內容。 PrintVisual方法生成Letter大小的頁面,因此爲了獲得不同的頁面大小,您需要使用PrintDocument方法,如下所示:

private void PrintMe() 
{ 
    var dlg = new PrintDialog(); 
    FixedPage fp = new FixedPage(); 
    fp.Height = 100; 
    fp.Width = 100; 
    fp.Children.Add(new System.Windows.Shapes.Rectangle 
     { 
      Width = 100, 
      Height = 100, 
      Fill = System.Windows.Media.Brushes.Red 
     }); 
    PageContent pc = new PageContent(); 
    pc.Child = fp; 
    FixedDocument fd = new FixedDocument(); 
    fd.Pages.Add(pc); 
    DocumentReference dr = new DocumentReference(); 
    dr.SetDocument(fd); 
    FixedDocumentSequence fds = new FixedDocumentSequence(); 
    fds.References.Add(dr);    

    if (dlg.ShowDialog() == true) 
    { 
     dlg.PrintDocument(fds.DocumentPaginator, "test"); 
    } 
}