C# 预览打印对话框

C# Preview Print Dialog

我有一个信息数据网格,单击打印按钮时 我想展示它的外观打印预览屏幕,然后 让用户打印文档。这是我到目前为止得到的:

        PrintDocument myDocument = new PrintDocument();


        PrintPreviewDialog PrintPreviewDialog1 = new PrintPreviewDialog();
        PrintPreviewDialog1.Document = myDocument;
        PrintPreviewDialog1.ShowDialog();

我的问题是如何将数据放到预览屏幕上。谢谢!

您需要添加 PrintPage 事件:

myDocument.DocumentName = "Test2015";
myDocument.PrintPage += myDocument_PrintPage;

并且您需要对其进行编码!在最简单的形式中,这将转储数据:

void myDocument_PrintPage(object sender, PrintPageEventArgs e)
{
   foreach(DataGridViewRow row in dataGridView1.Rows)
      foreach(DataGridViewCell cell in row.Cells)
      {
          if (Cell.Value != null)
              e.Graphics.DrawString(cell.Value.ToString(), Font,  Brushes.Black, 
                          new Point(cell.ColumnIndex * 123, cell.RowIndex  * 12 ) );
      }
}

但是当然你会想要添加更多以获得漂亮的格式等。

  • 例如,您可以使用 Graphics.MeasureString() 方法找出一大块文本的大小来优化坐标,这些坐标是硬编码的,只是为了在这里进行测试。

  • 您可以使用 cell.FormattedValue 而不是原始的 Value

  • 你可能想准备一些你会用到的Fonts,在dgv前加一个header,或者一个标志..

另外值得考虑的是将 Unit 设置为独立于设备的东西,例如 mm

e.Graphics.PageUnit = GraphicsUnit.Millimeter;

并且,如果需要,您应该跟踪垂直位置,以便您可以添加页码并识别页面何时已满!

更新: 由于您的 DGV 可能包含空单元格,我添加了对 null.

的检查