5

WPF 印刷パスを使用して、アプリケーションで作成された大きな大きな図を処理します。図全体はビジュアルで構成されています。

いわゆる「DesignerPaginator」がダイアグラムのページ付けを行います (非常に単純です)。この時点から、次の 3 つのことを行います。 - PrintDialog.PrintDocument(Paginator, Title) を使用してドキュメントを印刷します。HDDに保存します-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");

出力は次のとおりです。

HDD 上の XPS -> 完全にぼやけています。何も認識できません。100 倍ズームの GIF ファイルのようなものです。DocumentViewer の XPSDocument からの FixedDocumentSequence -> パーフェクト。これは、XPSファイルが印刷出力であることを意味するものでなければなりません->恐ろしく、ぼやけていますが、少なくともxpsファイルよりははるかに優れています

そして今、不思議な部分: DocumentViewer (FixedDocumentSequence が完璧に見える) から直接印刷すると、最初の印刷から同じぼやけた出力が得られます。

このケースについての私の考えは、WPF の XPS システムがコンテンツをラスタライズし、xps ドキュメント内に低品質のビットマップとして配置することです。それはすべてベクトルであり、この事実にもかかわらず、出力は常に低解像度のビットマップになじみがあるように見えます。

助けていただければ幸いです。私はアイデアがありません。私はこの問題をデバッグするために多くのことを試みましたが、どういうわけか単純であると同時に繊細なもののようです。

4

1 に答える 1

4

私の問題を回避する方法を見つけましたが、解決策があなたの問題にも当てはまることを保証することはできません。実際、Visual に投影された 2 つのネストされた VisualBrushes を使用すると、ぼやけた出力が得られるようです。

wpf 印刷で使用する VisualBrush の 1 つを避けることはできません。それは、ビジュアルを切り取って複数のページに配布するために Paginator を介して適用されるものです。「テンプレート」として機能する UserControl も 1 つありました。ダイアグラムの VisualBrush を使用して Rectangle を UserControl に描画します。この操作の後、UserControl 自体は、ページネーターによって VisualBrush を使用して Rectangle としてページに描画されます。WPF の印刷パスは印刷に XPS を使用するため、XPSDocument を作成し、ファイルの種類を zip に変更して抽出し、任意のテキスト エディターでドキュメントの 1 ページを分析することもできます。これは、問題を理解するのに非常に役立ちます。

また、VisualBrush のコンテンツが Visual の元の 1:1 の高さと幅の比率で適用されていない場合、ドキュメントが「ラスタライズ」されていると思われます。サイズ変更計算内のエラーにより、適用された VisualBrush の高さ/幅の比率が 1:0.9948 になり、これにより出力がぼやけました (「ネストされた VisualBrush」の問題を除く)。

これはまだ疑惑に過ぎません。「余分な」VisualBrushを除外し、元のアスペクト比を尊重することで、私の問題は解決しました。1 つまたは両方の問題が、特定の Visual/Effect/Transformation または LinearBrushes との組み合わせでのみ発生すると想定することもできます。

少なくとも、このような問題に関しては、WPF 印刷パスについて 1 つのことを学びました。あなたのものは常に舞台裏で xps に変換され、xps は wpf に似ていますが、wpf が行うことは何もサポートしていないという事実を考えてみてください。 . 実際、誤解していなければ、XPS は WPF の XAML のインスピレーションでした。

また、この問題に対する本当の答えを大歓迎します。私の問題は解決しましたが、なぜそれが起こったのか知りたいです。

于 2009-10-02T12:26:59.777 に答える