用C#打印(wpf)

我正在制作一个C#WPF程序,我的程序必须能够打印发票,但我很难找到WPF中的打印方式……如果我记得winforms中的编程,你会使用GDI +打印。 但是,我认为WPF不是这种情况。

如果有人能指出我正确的方向,并提供一些有用的文件或示例的链接,我将非常高兴…

在WPF中打印既简单又不那么简单。 但是要指出一篇很容易找到谷歌的介绍文章,请看这里 。

它首先基本上是您要打印的一行或两行代码。

private void PrintBtn_Click(object sender, RoutedEventArgs e) { PrintDialog printDialog = new PrintDialog(); if (printDialog.ShowDialog() == true) { printDialog.PrintVisual(grid, "My First Print Job"); } } 

但是,WPF中的分页不是使用单行代码完成的。 然后,您将进入FlowDocuments和类似的更高级主题。

如果您正在为自己制作非商业工具,请考虑iTextSharp ,它也非常好。

如果你想在WPF中打印来自datagrid的所有记录。我在其中使用代码创建流程文档,你可以理解逻辑并根据自己的要求制作它。经过大量的工作。我最近完成了代码。它是经过测试的代码。它将打印所有记录的每个数据网格。它是简单而简单的代码。您将添加一个类。如果您想要装饰数据网格,那么转到PrintDG类,然后根据自己的要求进行装饰。
跟着这些步骤。
第1步:在顶部添加这些引用。

  using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Media; 

第2步:添加类PrintDG.cs。

  public class PrintDG { public void printDG(DataGrid dataGrid, string title) { PrintDialog printDialog = new PrintDialog(); if (printDialog.ShowDialog() == true) { FlowDocument fd = new FlowDocument(); Paragraph p = new Paragraph(new Run(title)); p.FontStyle = dataGrid.FontStyle; p.FontFamily = dataGrid.FontFamily; p.FontSize = 18; fd.Blocks.Add(p); Table table = new Table(); TableRowGroup tableRowGroup = new TableRowGroup(); TableRow r = new TableRow(); fd.PageWidth = printDialog.PrintableAreaWidth; fd.PageHeight = printDialog.PrintableAreaHeight; fd.BringIntoView(); fd.TextAlignment = TextAlignment.Center; fd.ColumnWidth = 500; table.CellSpacing = 0; var headerList = dataGrid.Columns.Select(e => e.Header.ToString()).ToList(); for (int j = 0; j < headerList.Count; j++) { r.Cells.Add(new TableCell(new Paragraph(new Run(headerList[j])))); r.Cells[j].ColumnSpan = 4; r.Cells[j].Padding = new Thickness(4); r.Cells[j].BorderBrush = Brushes.Black; r.Cells[j].FontWeight = FontWeights.Bold; r.Cells[j].Background = Brushes.DarkGray; r.Cells[j].Foreground = Brushes.White; r.Cells[j].BorderThickness = new Thickness(1, 1, 1, 1); } tableRowGroup.Rows.Add(r); table.RowGroups.Add(tableRowGroup); for (int i = 0; i < dataGrid.Items.Count; i++) { DataRowView row = (DataRowView)dataGrid.Items.GetItemAt(i); table.BorderBrush = Brushes.Gray; table.BorderThickness = new Thickness(1, 1, 0, 0); table.FontStyle = dataGrid.FontStyle; table.FontFamily = dataGrid.FontFamily; table.FontSize = 13; tableRowGroup = new TableRowGroup(); r = new TableRow(); for (int j = 0; j < row.Row.ItemArray.Count(); j++) { r.Cells.Add(new TableCell(new Paragraph(new Run(row.Row.ItemArray[j].ToString())))); r.Cells[j].ColumnSpan = 4; r.Cells[j].Padding = new Thickness(4); r.Cells[j].BorderBrush = Brushes.DarkGray; r.Cells[j].BorderThickness = new Thickness(0, 0, 1, 1); } tableRowGroup.Rows.Add(r); table.RowGroups.Add(tableRowGroup); } fd.Blocks.Add(table); printDialog.PrintDocument(((IDocumentPaginatorSource)fd).DocumentPaginator, ""); } } } 

Step2:然后去打印按钮点击事件并创建PrintDG类的对象然后调用printDG传递给它两个参数datagridname和title。
喜欢 :

 private void print_button_Click(object sender, RoutedEventArgs e) { PrintDG print = new PrintDG(); print.printDG(datagridName, "Title"); } 

如果在执行期间发生任何错误,请告诉我我将解决它。只运行代码复制和过去。