繁体   English   中英

使用自定义分页器和XpsDocumentWriter的打印预览未显示在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM