程序员的知识教程库

网站首页 > 教程分享 正文

C#使用 WinForms 实现打印基础操作

henian88 2025-05-14 13:39:59 教程分享 2 ℃ 0 评论

在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(#34;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的打印功能。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表