2013-07-26 62 views
1

我有一個WPF報表,它以自定義頁面大小繪製報表內容(我們可以認爲它是A4,問題是相同的),如果我將輸出發送到打印機(物理或虛擬像PDFCreator)我的自定義頁面大小正確保留每頁。從WPF報表中輸出XPS中的自定義頁面大小

但是,當我將它輸出爲XPS格式時,頁面會適應Letter頁面大小。

如何在向WPF輸出WPF報表時保留我的自定義頁面大小?

我的最終目標:是從WPF獲得PDF,而我的方法是使用PDFSharper將XPS轉換爲PDF。轉換效果很好,但XPS輸出損壞了我的自定義頁面大小。其他方法是受歡迎的,但我想理解並控制XPS輸出頁面大小。

示例工程:Test_WpfToPDF_withXpsCorruptingPageSizeToLetter.zip

+0

您能告訴我們一些您用於從XPS轉換爲PDF的代碼嗎? – Sevenate

+0

你是指什麼意思* WPF報告*完全是?這是來自[custom](http://wpfreports.codeplex.com)組件還是僅僅使用[某種方法](http://blogs.vertigo.com/personal/Paul/Blog/Lists/Posts/ Post.aspx?ID = 2)打印任意WPF控件或什麼? – Sevenate

+0

XPS轉PDF不是問題,PDFSharper的作品。我的問題是當WPF打印爲XPS。即使使用XPS查看器,頁面也會「損壞」,所以問題不在於PDFSharper。但我會試着離開這裏下載一個示例項目。 [無論如何你應該看到:http://msdn.microsoft.com/en-us/library/ms742418.aspx] – Luciano

回答

3

看來,當你換另一種元素中的用戶控件(報告),也提供真實大小,不要忘了把一個後臺工作。 我不確切地知道爲什麼,但背景似乎與訣竅一起,隨着大小。

public override DocumentPage GetPage(int pageNumber) { 
    var page = new MyUserControl(); 

    Border wrapper = new Border(); 
    wrapper.Width = this.PageSize.Width; 
    wrapper.Height = this.PageSize.Height; 
    wrapper.Background = Brushes.White; 

    wrapper.Child = page; 

    wrapper.Measure(this.PageSize); 
    wrapper.Arrange(new Rect(new Point(0, 0), this.PageSize)); 
    wrapper.UpdateLayout(); 

    return new DocumentPage(wrapper); 
}