2015-12-11 33 views
10

現在、コンテンツコンテナの内容(情報付きのデータグリッドのみ)とPrintFixedDocumentを使用したイメージを印刷しようとしています。それは完全な画像品質と私のマシン(ウィンドウ10)に完璧に印刷し、Windows 8である別のPCで、品質は同じです。PrintFixedDocument wpf印刷品質 - Windows 10/8とWindows 7

しかし、これがWindows 7 PCで行われると、画質が非常に悪くなり、最終的な結果が非常にぼやけます。これは、Windows 7からさまざまな理由でコンピュータを更新できないため、他の誰かがこれを経験しているのか不思議ですが、回避策があるのでしょうか?私はうまくいかないことができますが、これは両方で動作する理由も、私のGetFixedDocument方法の問題である可能性があり10および8ではなく7

NOTEに勝つこれは、各PC上のアプリケーションのインストール済みのバージョンから実行されている

  <StackPanel Margin="-105,146,66,0" Height="900" VerticalAlignment="Top" x:Name="PrintImageContextMenu"> 
       <Image Canvas.ZIndex="0" Source="{Binding Coupon.OverlayImagePath}" Margin="0,-21,-76,108" Stretch="Fill" /> 

       <ContentControl Content="{Binding}" ContentTemplateSelector="{StaticResource DataViewerDataTemplateSelector}" /> 

      </StackPanel> 

はまた、任意のヘルプは

XAMLをいただければ幸いです

ALL 3つのオペレーティングシステム上で複数のプリンタで試みられて

C番号: パブリックパーシャルクラスCouponViewerView {パブリックCouponViewerView(){ のInitializeComponent(); }

public void Print() 
    { 
     //Executes On Thread 
     Application.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, (EventHandler)delegate 
     { 
      UpdateLayout(); 

      var fixedDoc = PrintHelper.GetFixedDocument(StackPanelToPrint, new PrintDialog()); 

      PrintHelper.ShowPrintPreview(fixedDoc); 


     }, null, null); 



    } 

    private void PrintCurrentForm(object sender, RoutedEventArgs e) 
    { 
     Print(); 
    } 

C#印刷ヘルパーコード:

public static void ShowPrintPreview(FixedDocument fixedDoc) 
     { 
      var wnd = new Window(); 
      var viewer = new DocumentViewer(); 
      viewer.Document = fixedDoc; 
      wnd.Content = viewer; 
      wnd.ShowDialog(); 
     } 


    public static FixedDocument GetFixedDocument(FrameworkElement toPrint, PrintDialog printDialog) 
     { 
      var capabilities = printDialog.PrintQueue.GetPrintCapabilities(printDialog.PrintTicket); 
      var pageSize = new Size(printDialog.PrintableAreaWidth, printDialog.PrintableAreaHeight); 
      var visibleSize = new Size(capabilities.PageImageableArea.ExtentWidth, capabilities.PageImageableArea.ExtentHeight); 
      var fixedDoc = new FixedDocument(); 
      //If the toPrint visual is not displayed on screen we neeed to measure and arrange it 
      toPrint.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); 
      toPrint.Arrange(new Rect(new Point(0, 0), toPrint.DesiredSize)); 
      // 
      var size = toPrint.DesiredSize; 
      //Will assume for simplicity the control fits horizontally on the page 
      double yOffset = 0; 
      while (yOffset < size.Height) 
      { 
       var vb = new VisualBrush(toPrint) 
       { 
        Stretch = Stretch.None, 
        AlignmentX = AlignmentX.Left, 
        AlignmentY = AlignmentY.Top, 
        ViewboxUnits = BrushMappingMode.Absolute, 
        TileMode = TileMode.None, 
        Viewbox = new Rect(0, yOffset, visibleSize.Width, visibleSize.Height) 
       }; 
       var pageContent = new PageContent(); 
       var page = new FixedPage(); 
       ((IAddChild)pageContent).AddChild(page); 
       fixedDoc.Pages.Add(pageContent); 
       page.Width = pageSize.Width; 
       page.Height = pageSize.Height; 
       var canvas = new Canvas(); 
       FixedPage.SetLeft(canvas, capabilities.PageImageableArea.OriginWidth); 
       FixedPage.SetTop(canvas, capabilities.PageImageableArea.OriginHeight); 
       canvas.Width = visibleSize.Width; 
       canvas.Height = visibleSize.Height; 
       canvas.Background = vb; 
       page.Children.Add(canvas); 
       yOffset += visibleSize.Height; 
      } 
      return fixedDoc; 
     } 
+0

あなたはおそらくすでにチェックしていると確信していますが、ちょうどうんざりです。win7マシンの設定をチェックして、ドラフトモードで印刷していないことを確認したか、または手動でサイズを変更するなど、印刷ドライバが最新のものかどうかを確認しましたか? –

+0

はい、すべての通常の容疑者を排除しました。すべてのプリンタとすべてのドライバの高品質な印刷が最新です。その本当に奇妙なアイブは、それのようなものは見たことがありません。 – philmckendry

+0

さて、彼らは、ドライバやパッケージにいくつかの変更を加えて、メーカーがOEMのbloatwareをやめさせるのをやめさせることを試みたが、OSのバージョンにかかわらず、同じ方法で全てを得るべきだと私が知っていた限り、それは興味深いものです。 –

答えて

0

誰がこれを経験しているので、回避策がありますか?

これは、唯一直接答えることのできる質問です。はい、多くです。多くの場合、プリンタで画像を大きくリサイズすることは、モニタと比較してドット/インチ解像度が非常に高いデバイスであることに注意してください。 Win7を起動するマシンは、しばしば96dpiで動作し、後のものはより良いモニタを持つ傾向があり、より高いdpi設定で実行されることが多い。最初に注意しなければならないことはソースイメージです。そのWin7 PCに適したピクセルサイズを持っていれば、600dpiまで吹き飛ばされると非常にぼやけることがあります。

おそらく、WPFの最も直感的でないスケーリングの動作は、スケーリング後にイメージの配置がターゲットピクセルと完全に一致しない場合です。 this blog postによく記載されている問題。 this SO questionも読んでください.VisualBrushの使用方法とぼやけの問題にほぼ完全に合っています。この問題は、.NET 4.0で追加されたUseLayoutRoundingプロパティで解決されました。あなたはそれを使用していない、あなたは間違いなく。 dupが推奨するBitmapScalingModeを盲目的に適用しないでください。画像のタイプ(ラインアートと写真)は大変重要です。

+0

答えに感謝します。この問題を解決するには、私は遠ざかり、見ることがたくさんあります – philmckendry

0

私は同様の問題を抱えていましたが、PDFを作成するために直接印刷するのではなく、クライアントのためにそのファイルを開いて、うまくいけば印刷できました。

Windows 7はWPF印刷の一部で壊れているようです。

関連する問題