2017-03-13 19 views
0

破線は、プリンタの解像度に応じてダッシュの数が異なります。なぜdpiは独立していないのですか?どうすれば修正できますか?WPFで破線の印刷が間違っていますか?

var line = new Line(); 
line.Stroke = Brushes.Black; 
line.StrokeThickness = 1; 
line.X1 = line.Y1 = 100; 
line.X2 = line.Y2 = 200; 
line.StrokeDashArray = new DoubleCollection(new[] { 8.0 }); 

var dialog = new PrintDialog(); 

if (dialog.ShowDialog() == true) 
{ 
    Size pageSize = new Size(
     dialog.PrintableAreaWidth, dialog.PrintableAreaHeight); 

    line.Measure(pageSize); 
    line.Arrange(new Rect(0, 0, pageSize.Width, pageSize.Height)); 

    dialog.PrintVisual(line, "description"); 
} 

私はPrintVisualを使用しましたが、あなたは破線でのFixedDocumentを作成し、のPrintDocumentを使用することができます。結果は同じになります。

答えて

0

WPFは本質的にDPIの変更に反応します。特に明記されていない限り、ほとんどのコントロールはベクターグラフィックです。私はあなたのプリンタがあなたのもののダンプを印刷するのではなく、画面。

WPFと私の経験から、少なくとも2つのオプションがあります。

オプション1 - あなたが使用してDPIを全く知らないだろうこれ、WPFは、ビットマップオブジェクトとして制御キャプチャすることができ、ビットマップを作成し、それを
を印刷するにはRenderTargetBitmapを入力し、通常の方法で印刷します。生成されたビットマップがディスプレイの解像度によって異なることに注意する価値がある/システムのスケーリングはビットマップが画面上に表示されなければならないものとしてキャプチャしたいものである(スクロールボックスなどのスクリーン外ではない)。&で生成された。

オプション2 - それは、高解像度ディスプレイでのスケーリング防ぐことができますように、あなたはおそらく、このオプションを使用しない あなたのアプリDPIは気づいていないしてください(ただし、一時的にだけ印刷のためにこれを達成する方法があるかもしれませんあなたのプリンタはUIのものであるためこのオプションを無視するかもしれませんが、現在はテストできませんが)several ways to prevent your app from acknowledging DPIが一緒にあります。

私は現在、これらのオプションが動作しないため、これらのオプションが動作するかどうかは完全にはわかりません。もし私ができるなら、私はこれをコメントとして掲示しただろう。がんばろう!

+0

私は興味があります:) **オプション1について** FixedDocumentにベクターグラフィックスを保存してからXPSファイルとして保存するため、このアドバイスは使用できません。重要なファイルサイズは小さくなり、印刷品質はどのページサイズでも同じになります。 **オプション2について** この方法は私に合っていません。 – CrazyCoder

+0

オプション1の場合、ビットマップを固定文書に挿入できるはずです。 なぜ、WPFアプリケーションが最初にDPI応答性であるのかがすぐに分からない場合、なぜオプション2があなたに合わないのか不思議です。彼らは、人々が使用する画面サイズ/解像度の膨大な範囲のために反応します。理論的には、どのWPFアプリケーションも、どんなディスプレイでもきれいに表示されているはずです。 – JLangford

関連する問題