Ale*_*ker 5 printing wpf document paginator xps
我使用WPF打印路径来处理在我们的应用程序中创建的大型图表.整个图表由视觉效果组成.
一个所谓的"DesignerPaginator"对图表进行分页(非常简单).从这一点开始,我做了以下三件事: - 我用PrintDialog.PrintDocument(Paginator,Title)打印文档 - 我还用XpsDocumentWriter.Write创建了一个XPS文档(Paginator,PrintTicket); 我保存在硬盘上 - 从XPSDocument我将XpsDocumentWriter.GetFixedDocumentSequence()分配给DocumentViewer
简而言之,以下代码很重要:
PrintDialog _pdialog = new PrintDialog();
System.Printing.ValidationResult result = this.PrintQueue.MergeAndValidatePrintTicket(this.PrintQueue.UserPrintTicket, this.PrintTicket);
_pdialog.PrintTicket = result.ValidatedPrintTicket;
XpsDocument _xpsDocument = new XpsDocument("C:\\test.xps",FileAccess.ReadWrite);
XpsDocumentWriter xpsdw = XpsDocument.CreateXpsDocumentWriter(_xpsDocument);
xpsdw.Write(this.Paginator, result.ValidatedPrintTicket);
documentviewer.Document = _xpsDocument.GetFixedDocumentSequence();
_xpsDocument.Close();
_pdialog.PrintQueue = this.PrintQueue;
_pdialog.PrintDocument(this.Paginator, "Model Test");
Run Code Online (Sandbox Code Playgroud)
输出如下:
HDD上的XPS - >绝对模糊.你无法识别任何东西.它就像一个100倍变焦的GIF文件.来自DocumentViewer中XPSDocument的FixedDocumentSequence - > Perfect.这应该是XPS文件的打印输出 - >可怕,模糊,但至少比xps文件好多了
现在神秘的部分:如果我直接从DocumentViewer打印(其中FixedDocumentSequence看起来很完美),我从第一次打印得到相同的模糊输出.
我对这种情况的想法是WPF的XPS系统光栅化内容并将内容放在xps文档中作为低质量的Bitmap.它是所有向量,尽管如此,低分辨率位图的输出似乎总是很熟悉.
我将不胜感激任何帮助.我没有想法.我尝试了很多来调试这个问题,但它似乎在某种程度上同时简单而精致.
我找到了如何避免我的问题,但我不能保证该解决方案也适用于您的问题。事实上,似乎使用两个嵌套的 VisualBrush 投影在您的 Visual 上,您正在使用模糊输出的结果。
我们在 wpf 打印中使用的一种 VisualBrush 是不可避免的:它是通过我们的分页器应用的一种,用于剪切视觉并将其分布到多个页面上。我还有一个用作“模板”的用户控件。我使用图表的 VisualBrush 将一个矩形绘制到 UserControl 中,在此操作之后,用户控件本身将通过分页器使用 VisualBrush 将其自身绘制为矩形。由于 WPF 的打印路径使用 XPS 进行打印,因此您还可以创建 XPSDocument,将文件类型更改为 zip,将其解压并使用任何文本编辑器分析文档的一页。这将极大地帮助您理解您的问题。
我还怀疑,当 VisualBrush 的内容未应用 Visual 的原始 1:1 高/宽比时,文档会被“光栅化”。调整大小计算中的错误导致所应用的 VisualBrush 的高度/宽度比为 1:0.9948,从而导致输出模糊(不包括“嵌套 VisualBrush”问题)。
这仍然只是一个怀疑。我的问题已通过排除“额外”VisualBrush 并尊重原始宽高比得到解决。还可以假设一个/或两个问题仅与特定视觉/效果/变换甚至 LinearBrush 结合出现。
至少,在涉及此类问题时,我了解到有关 WPF 打印路径的一件事:想想这样一个事实:您的内容总是在幕后转换为 xps,而 xps 与 wpf 类似,但不支持 wpf 所做的任何操作。事实上,如果我没有理解错的话,XPS 是 WPF 中 XAML 的灵感来源。
我也非常欢迎对此问题的任何真正答案。我的问题已经解决了,但我想知道为什么会发生这种情况。
归档时间: |
|
查看次数: |
2777 次 |
最近记录: |