当我选择Microsoft XPS Document Writer作为打印机时,我的输出是完美的但是当我选择我的HP 1020打印机时,打印机输出空白副本...以下是代码....
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");
}
}
Run Code Online (Sandbox Code Playgroud)
小智 8
这可能是由许多不同的事情引起的.您可以添加一些步骤,如果正确执行,可能会导致飞行员返回货物和知识.
首先,您应该扩展到打印页面(来自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");
Run Code Online (Sandbox Code Playgroud)
货物崇拜代码在测量和排列步骤中.通常,如果你打电话给测量并传递一个new Size(Double.MaxValue, Double.MaxValue)你需要做的全部内容.
第二个仪式涉及碰撞调度员.
visual.DataContext = foo;
Dispatcher.Invoke((Action)()=>{;}); // bamp
// print here
Run Code Online (Sandbox Code Playgroud)
试试这些,看看它是否有帮助.
| 归档时间: |
|
| 查看次数: |
6093 次 |
| 最近记录: |