我不能留下評論,因爲我只有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樣子:
比方說,你不希望它打印到文件,或者您想將其發送到打印機。
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。
來源
2014-12-26 21:04:48
KCL