下面就为大家详细讲解“C#调用打印机实现打印”的完整攻略。
1. 获取打印机列表
在C#中,我们可以通过System.Drawing.Printing.PrinterSettings.InstalledPrinters属性获取已安装的打印机列表。
foreach (string printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
{
Console.WriteLine(printer);
}
上述示例代码通过循环打印机列表并输出打印机名称。
2. 基础的打印步骤
在打印之前,我们需要先创建一个打印文档对象,并设置相关参数。
using System.Drawing;
using System.Drawing.Printing;
PrintDocument doc = new PrintDocument();
doc.DefaultPageSettings.Landscape = true; // 设置横向打印
doc.DefaultPageSettings.Margins = new Margins(50, 50, 50, 50); // 设置页边距
doc.PrintPage += new PrintPageEventHandler(PrintPage); // 设置打印事件处理
在上述示例中,我们创建了一个PrintDocument文档对象,并通过设置文档的DefaultPageSettings属性,设置了横向打印和页边距。同时,我们还通过doc.PrintPage事件绑定了一个PrintPageEventHandler委托,以便在打印时执行相关操作。
private void PrintPage(object sender, PrintPageEventArgs e)
{
Graphics g = e.Graphics;
// 打印文本内容
Font font = new Font("Tahoma", 12, FontStyle.Regular);
g.DrawString("Hello C#", font, Brushes.Black, 100, 100);
// 打印图像
Image img = Image.FromFile("PrintImage.jpg");
g.DrawImage(img, 200, 200, img.Width, img.Height);
}
在上述示例的PrintPage方法中,我们通过Graphics对象进行打印操作。这里展示了两种打印方式,一种是通过g.DrawString方法打印文本内容,另一种是通过g.DrawImage方法打印图像。这两种方法都需要指定字体、画刷等参数,并指定打印内容的位置。
在将打印文档对象传递给打印机之前,我们还需要设置打印机的信息,例如打印机名称、纸张类型、横向或纵向打印等。
PrintDialog pd = new PrintDialog();
if (pd.ShowDialog() == DialogResult.OK)
{
// 设置打印机
doc.PrinterSettings.PrinterName = pd.PrinterSettings.PrinterName;
doc.DefaultPageSettings.PaperSize = pd.PrinterSettings.DefaultPageSettings.PaperSize;
doc.DefaultPageSettings.Landscape = pd.PrinterSettings.DefaultPageSettings.Landscape;
// 开始打印
doc.Print();
}
上述示例中,我们使用了PrintDialog对话框来选择打印机。通过pd.PrinterSettings属性获取了打印机的相关信息,并将其设置到PrintDocument对象中,从而实现了打印操作。
示例1:打印文件
PrintDocument doc = new PrintDocument();
doc.DefaultPageSettings.Landscape = true;
doc.PrinterSettings.PrintFileName = @"E:\test.txt"; // 设置要打印的文件
PrintDialog pd = new PrintDialog();
if (pd.ShowDialog() == DialogResult.OK)
{
doc.PrinterSettings.PrinterName = pd.PrinterSettings.PrinterName;
doc.PrinterSettings.DefaultPageSettings.PaperSize = pd.PrinterSettings.DefaultPageSettings.PaperSize;
doc.PrinterSettings.DefaultPageSettings.Landscape = pd.PrinterSettings.DefaultPageSettings.Landscape;
doc.Print();
}
在上述示例中,我们首先创建了一个PrintDocument对象,并通过doc.PrinterSettings.PrintFileName属性指定了要打印的文件。接着弹出打印机选择对话框,通过pd.PrinterSettings属性获取选择的打印机信息,并将其设置到PrintDocument对象中。最后调用Print方法实现打印。
示例2:打印DataGridView控件
private void btnPrint_Click(object sender, EventArgs e)
{
PrintDocument doc = new PrintDocument();
doc.DefaultPageSettings.Landscape = true;
doc.PrintPage += new PrintPageEventHandler(PrintDataGrid);
doc.PrinterSettings.PrinterName = "Microsoft Print to PDF"; // 选择一个虚拟打印机
PrintPreviewDialog pvd = new PrintPreviewDialog();
pvd.Document = doc;
pvd.ShowDialog();
}
private void PrintDataGrid(object sender, PrintPageEventArgs e)
{
int x = e.MarginBounds.X;
int y = e.MarginBounds.Y;
int w = e.MarginBounds.Width;
int h = e.MarginBounds.Height;
// 绘制表头
Font headerFont = new Font("Tahoma", 14, FontStyle.Bold);
Brush headerBrush = new SolidBrush(Color.Black);
StringFormat format1 = new StringFormat();
format1.Alignment = StringAlignment.Center;
format1.LineAlignment = StringAlignment.Center;
for (int i = 0; i < dataGridView1.Columns.Count; i++)
{
RectangleF rectF = new RectangleF(x, y, (float)dataGridView1.Columns[i].Width, (float)headerFont.Height);
e.Graphics.DrawString(dataGridView1.Columns[i].HeaderText, headerFont, headerBrush, rectF, format1);
x += dataGridView1.Columns[i].Width;
}
// 绘制表格数据
Font contentFont = new Font("Tahoma", 12, FontStyle.Regular);
Brush contentBrush = new SolidBrush(Color.Black);
StringFormat format2 = new StringFormat();
format2.Alignment = StringAlignment.Near;
format2.LineAlignment = StringAlignment.Center;
x = e.MarginBounds.X;
y += headerFont.Height;
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
x = e.MarginBounds.X;
for (int j = 0; j < dataGridView1.Columns.Count; j++)
{
RectangleF rectF = new RectangleF(x, y, (float)dataGridView1.Columns[j].Width, (float)contentFont.Height);
e.Graphics.DrawString(dataGridView1.Rows[i].Cells[j].Value.ToString(), contentFont, contentBrush, rectF, format2);
x += dataGridView1.Columns[j].Width;
}
y += contentFont.Height;
}
}
在上述示例中,我们首先创建了一个PrintDocument对象,并通过doc.PrintPage事件绑定了一个委托PrintDataGrid,该委托用于实现DataGridView控件的打印。接着设置了横向打印和打印机名称,并弹出打印预览对话框。在PrintDataGrid委托中,我们通过Graphics对象绘制了DataGridView控件的表头和表格数据。绘制的过程中需要针对不同内容设置不同的字体、颜色和对齐方式等信息。
这里选择了一个虚拟打印机Microsoft Print to PDF,它可以将打印内容以PDF格式输出到文件,方便查看和分享。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#调用打印机实现打印 - Python技术站