编辑
2025-02-03
C# 应用
00
请注意,本文编写于 92 天前,最后修改于 92 天前,其中某些信息可能已经过时。

目录

引入打印所需的命名空间
打印预览控件
基本的打印操作
高级的打印设置
使用打印对话框
设置打印页面的属性
实际案例
总结

在Windows应用程序中,打印是一个常见的需求。C#的WinForms提供了完备的打印支持,通过一些类和控件可以轻松实现打印功能。本篇文章将详细介绍在WinForms中实现打印的基本操作。

引入打印所需的命名空间

为了使用打印功能,我们需要引入一些特定的命名空间:

C#
using System.Drawing; using System.Drawing.Printing; using System.Windows.Forms;

打印预览控件

在开始打印之前,通常会提供一个预览功能让用户确认打印内容是否正确。WinForms提供了PrintPreviewControlPrintPreviewDialog两个控件用于打印预览。

C#
public partial class Form1 : Form { PrintPreviewDialog printPreviewDialog = new PrintPreviewDialog(); PrintDocument printDocument = new PrintDocument(); public Form1() { InitializeComponent(); } private void btnPrint_Click(object sender, EventArgs e) { // 绑定事件 printDocument.PrintPage += new PrintPageEventHandler(PrintDocument_PrintPage); // 设置文件源 printPreviewDialog.Document = printDocument; ShowPrintPreview(); } private void PrintDocument_PrintPage(object sender, PrintPageEventArgs e) { e.Graphics.DrawString("Hello, World!", new Font("Arial", 20), Brushes.Black, new PointF(100, 100)); } private void ShowPrintPreview() { printPreviewDialog.ShowDialog(); } }

image.png

基本的打印操作

打印操作的核心是PrintDocument类,通过它可以控制打印的内容和格式。

C#
private void PrintDocument_PrintPage(object sender, PrintPageEventArgs e) { e.Graphics.DrawString("Hello, World!", new Font("Arial", 20), Brushes.Black, new PointF(100, 100)); } private void Print() { PrintDocument printDocument = new PrintDocument(); printDocument.PrintPage += new PrintPageEventHandler(PrintDocument_PrintPage); printDocument.Print(); }

以上代码将在打印纸上绘制一行“Hello, World!”的文本。

高级的打印设置

使用打印对话框

可以通过PrintDialog让用户选择打印机、设置页边距等打印选项。

C#
private void PrintWithDialog() { PrintDocument printDocument = new PrintDocument(); PrintDialog printDialog = new PrintDialog(); printDocument.PrintPage += new PrintPageEventHandler(PrintDocument_PrintPage); printDialog.Document = printDocument; if (printDialog.ShowDialog() == DialogResult.OK) { printDocument.Print(); } }

image.png

设置打印页面的属性

可以通过PageSettingsPrinterSettings设置打印页面的详细属性。

C#
private void SetPageSettings(PrintDocument printDocument) { // 设置页面方向 printDocument.DefaultPageSettings.Landscape = true; // 设置页边距 printDocument.DefaultPageSettings.Margins = new Margins(50, 50, 50, 50); // 设置打印纸张大小 printDocument.DefaultPageSettings.PaperSize = new PaperSize("A4", 210, 297); }

实际案例

假设我们有一个WinForms程序,需要打印一个列表中的多个项,并支持分页。以下是一个完整的例子:

C#
using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Printing; using System.Windows.Forms; namespace Printer { public partial class Form1 : Form { private List<string> itemsToPrint; // 打印内容列表 private int printPageIndex; // 当前打印的页码 public Form1() { InitializeComponent(); // 初始化打印内容 itemsToPrint = new List<string>(); for (int i = 1; i <= 50; i++) { itemsToPrint.Add($"Item {i}"); // 添加50个打印项目 } } // 打印按钮的点击事件处理函数 private void PrintButton_Click(object sender, EventArgs e) { // 创建打印文档对象 PrintDocument printDocument = new PrintDocument(); // 订阅PrintPage事件,这个事件在每次需要生成打印页时触发 printDocument.PrintPage += new PrintPageEventHandler(PrintDocument_PrintPage); // 创建打印对话框对象,并将打印文档关联到对话框 PrintDialog printDialog = new PrintDialog { Document = printDocument }; // 显示打印对话框,如果用户确认打印,则开始打印 if (printDialog.ShowDialog() == DialogResult.OK) { // 初始化打印页码 printPageIndex = 0; // 开始打印 printDocument.Print(); } } // 打印文档的PrintPage事件处理函数 private void PrintDocument_PrintPage(object sender, PrintPageEventArgs e) { int itemsPerPage = 10; // 每页打印项目数 int itemIndex = printPageIndex * itemsPerPage; // 当前页起始项目索引 int yPosition = e.MarginBounds.Top; // 当前打印位置的Y坐标 // 逐行打印项目,直到页面下边界或者打印完所有项目 while (itemIndex < itemsToPrint.Count && yPosition < e.MarginBounds.Bottom) { // 在页面上绘制字符串 e.Graphics.DrawString(itemsToPrint[itemIndex], new Font("Arial", 14), Brushes.Black, new PointF(e.MarginBounds.Left, yPosition)); yPosition += 30; // 移动到下一行 itemIndex++; } // 更新页码 printPageIndex++; // 检查是否有更多页需要打印 if (itemIndex < itemsToPrint.Count) { e.HasMorePages = true; // 还有更多页 } else { e.HasMorePages = false; // 没有更多页 } } } }

image.png

总结

本文介绍了在WinForms中实现打印的基本操作,包括打印预览、基本打印、打印对话框使用以及高级设置。同时,通过一个具体的例子展示了打印多个项并支持分页的实现方式。希望这篇文章能够帮助你更好地理解和使用WinForms的打印功能。

本文作者:rick

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!