在Windows应用程序中,打印是一个常见的需求。C#的WinForms提供了完备的打印支持,通过一些类和控件可以轻松实现打印功能。本篇文章将详细介绍在WinForms中实现打印的基本操作。
引入打印所需的命名空间
为了使用打印功能,我们需要引入一些特定的命名空间:
using System.Drawing;using System.Drawing.Printing;using System.Windows.Forms;
打印预览控件
在开始打印之前,通常会提供一个预览功能让用户确认打印内容是否正确。WinForms提供了PrintPreviewControl和PrintPreviewDialog两个控件用于打印预览。
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();    }}

基本的打印操作
打印操作的核心是PrintDocument类,通过它可以控制打印的内容和格式。
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让用户选择打印机、设置页边距等打印选项。
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();    }}

设置打印页面的属性
可以通过PageSettings和PrinterSettings设置打印页面的详细属性。
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程序,需要打印一个列表中的多个项,并支持分页。以下是一个完整的例子:
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; // 没有更多页            }        }    }}

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