2011-01-25 56 views
4

Microsoft XPS Document Writerをプリンタとして選択した場合、出力は完璧ですが、HP 1020プリンタを選択すると、プリンタは空白のコピーを出力します...WPF印刷の問題

private void printButton_Click(object sender, RoutedEventArgs e) 
    { 
     PrintInvoice pi = new PrintInvoice(); 
     pi.DataContext = this.DataContext; 
     PrintDialog printDlg = new System.Windows.Controls.PrintDialog(); 
     if (printDlg.ShowDialog() == true) 
     { 
      pi.Margin = new Thickness(30); 

      //now print the visual to printer to fit on the one page. 
      printDlg.PrintVisual(pi, "First Fit to Page WPF Print"); 
     } 
    } 
+0

でのトリックはあなたが彼らがHPプリンターの問題を引き起こしているすべての要素があるかどうかを確認するためにPrintInvoiceを簡素化しようとしたことがありませんか? – RQDQ

+0

PrintInvoiceはページであり、Microsoft XPS Document Writerの出力は完璧です。 –

+0

両方のケースでpi.ActualHeightとpi.ActualWidthを確認するためにチェックしました。高さ= 950、幅= NaN これは原因と考えられる原因とその理由と解決方法です(HPプリンタのマシンが選択されている場合)Height = 0、Width = NaN ....(Microsoft XPS Document Writerが選択されている場合)この –

答えて

7

これは、さまざまな原因によって発生する可能性があります。あなたが追加することができますいくつかのステップがありますが、正しく実行されたとき、cause the flying men to return with goods and knowledge.

まず、あなたが印刷されたページ(a2zdotnetからコード)に拡大すべきである可能性があります

System.Printing.PrintCapabilities capabilities = 
    printDlg.PrintQueue.GetPrintCapabilities(printDlg.PrintTicket); 

//get scale of the print wrt to screen of WPF visual 
double scale = Math.Min(capabilities.PageImageableArea.ExtentWidth/this.ActualWidth, capabilities.PageImageableArea.ExtentHeight/
       this.ActualHeight); 

//Transform the Visual to scale 
this.LayoutTransform = new ScaleTransform(scale, scale); 

//get the size of the printer page 
Size sz = new Size(capabilities.PageImageableArea.ExtentWidth, capabilities.PageImageableArea.ExtentHeight); 

//update the layout of the visual to the printer page size. 
this.Measure(sz); 
this.Arrange(new Rect(new Point(capabilities.PageImageableArea.OriginWidth, capabilities.PageImageableArea.OriginHeight), sz)); 

    //now print the visual to printer to fit on the one page. 
    printDlg.PrintVisual(this, "Code ganked from http://www.a2zdotnet.com/View.aspx?id=66"); 

貨物カルトコードはです測定とアレンジのステップ。多くの場合、メジャーに電話してnew Size(Double.MaxValue, Double.MaxValue)を渡してください。

第2の儀式は、ディスパッチャーをバンプすることです。

visual.DataContext = foo; 
Dispatcher.Invoke((Action)()=>{;}); // bamp 
// print here 

これらを試してみてください。

+1

私は同じ問題を抱えていましたが、それでも印刷されませんでした。ディスパッチャをバンプすると何も変わりませんでしたが、コントロールのUpdateLayout()メソッドを呼び出すことで問題を解決することができました – glacasa

0

このXAMLは、いくつかの状況

<ScrollViewer HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"> 
    <... Name="myPrintElement" /> 
</ScrollViewer >