LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

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

admin
2024年7月25日 0:43 本文热度 946

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

引入打印所需的命名空间

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

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

打印预览控件

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

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();    }}

设置打印页面的属性

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

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 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved