![](/img/trans.png)
[英]Displaying Print Preview of HTML Document without DocumentViewer
[英]Print preview using custom paginator and XpsDocumentWriter not displaying in DocumentViewer
我創建了一個自定義文檔分頁器,該分頁器接受一個數據表並完全按照我的需要進行打印。 我想做一個打印預覽。 我已經閱讀了有關如何在內存中創建xps文件然后顯示它的所有文章。 我就是無法正常工作。 這是我的代碼。 我正在使用MVVM模式。 請注意代碼行_data.DocView = fds; 這會將數據傳遞給我的視圖模型。
PrintDialog dialog = new PrintDialog();
dialog.ShowDialog();
StoreDataSetPaginator paginator = new StoreDataSetPaginator(dt, new Typeface("Calibri"), 8, 96 * 0.75,
new Size(dialog.PrintableAreaWidth, dialog.PrintableAreaHeight));
//this is commented out to attempt the print preview
// dialog.PrintDocument(paginator, "Print out");
MemoryStream ms = new MemoryStream();
Package package = Package.Open(ms, FileMode.Create, FileAccess.ReadWrite);
Uri DocumentUri = new Uri("pack://InMemoryDocument.xps");
PackageStore.AddPackage(DocumentUri, package);
XpsDocument xpsDocument = new XpsDocument(package, CompressionOption.NotCompressed,
DocumentUri.AbsoluteUri);
XpsDocumentWriter writer = XpsDocument.CreateXpsDocumentWriter(xpsDocument);
writer.Write(paginator);
IDocumentPaginatorSource fds = xpsDocument.GetFixedDocumentSequence();
_data.DocView = fds;
PrintPreviewConduit prntv = new PrintPreviewConduit();
prntv.Show();
現在這是我的視圖模型:
private IDocumentPaginatorSource _docView;
public IDocumentPaginatorSource DocView
{
get { return _docView; }
set
{
_docView = value;
OnPropertyChanged("DocView");
}
}
最后是我的XAML:
<Grid>
<DocumentViewer Name="docview" Document="{Binding DocView}"/>
</Grid>
我在ViewModel的“ public IDocumentPaginatorSource DocView”上輸入了一個斷點,當我將鼠標懸停在該斷點上時,我得到了“ System.Windows.Documents.FixedDocumentSequence。不確定我應該得到什么。我花了好一陣子了,現在得到了任何幫助將不勝感激。
好吧,我覺得很蠢。 我沒有將新窗口的數據上下文設置為我的視圖模型。 現在一切正常!!!
PrintPreviewConduit prntv = new PrintPreviewConduit();
prntv.DataContext = _data;
_data.DocView = fds;
prntv.Show();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.