在Windows應(yīng)用程序中,打印是一個常見的需求。C#的WinForms提供了完備的打印支持,通過一些類和控件可以輕松實現(xiàn)打印功能。本篇文章將詳細介紹在WinForms中實現(xiàn)打印的基本操作。
引入打印所需的命名空間
為了使用打印功能,我們需要引入一些特定的命名空間:
using System.Drawing;
using System.Drawing.Printing;
using System.Windows.Forms;
打印預(yù)覽控件
在開始打印之前,通常會提供一個預(yù)覽功能讓用戶確認打印內(nèi)容是否正確。WinForms提供了PrintPreviewControl
和PrintPreviewDialog
兩個控件用于打印預(yù)覽。
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);
// 設(shè)置文件源
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
類,通過它可以控制打印的內(nèi)容和格式。
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!”的文本。
高級的打印設(shè)置
使用打印對話框
可以通過PrintDialog
讓用戶選擇打印機、設(shè)置頁邊距等打印選項。
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();
}
}
設(shè)置打印頁面的屬性
可以通過PageSettings
和PrinterSettings
設(shè)置打印頁面的詳細屬性。
private void SetPageSettings(PrintDocument printDocument)
{
// 設(shè)置頁面方向
printDocument.DefaultPageSettings.Landscape = true;
// 設(shè)置頁邊距
printDocument.DefaultPageSettings.Margins = new Margins(50, 50, 50, 50);
// 設(shè)置打印紙張大小
printDocument.DefaultPageSettings.PaperSize = new PaperSize("A4", 210, 297);
}
實際案例
假設(shè)我們有一個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; // 打印內(nèi)容列表
private int printPageIndex; // 當前打印的頁碼
public Form1()
{
InitializeComponent();
// 初始化打印內(nèi)容
itemsToPrint = new List<string>();
for (int i = 1; i <= 50; i++)
{
itemsToPrint.Add($"Item {i}"); // 添加50個打印項目
}
}
// 打印按鈕的點擊事件處理函數(shù)
private void PrintButton_Click(object sender, EventArgs e)
{
// 創(chuàng)建打印文檔對象
PrintDocument printDocument = new PrintDocument();
// 訂閱PrintPage事件,這個事件在每次需要生成打印頁時觸發(fā)
printDocument.PrintPage += new PrintPageEventHandler(PrintDocument_PrintPage);
// 創(chuàng)建打印對話框?qū)ο?,并將打印文檔關(guān)聯(lián)到對話框
PrintDialog printDialog = new PrintDialog
{
Document = printDocument
};
// 顯示打印對話框,如果用戶確認打印,則開始打印
if (printDialog.ShowDialog() == DialogResult.OK)
{
// 初始化打印頁碼
printPageIndex = 0;
// 開始打印
printDocument.Print();
}
}
// 打印文檔的PrintPage事件處理函數(shù)
private void PrintDocument_PrintPage(object sender, PrintPageEventArgs e)
{
int itemsPerPage = 10; // 每頁打印項目數(shù)
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; // 沒有更多頁
}
}
}
}
總結(jié)
本文介紹了在WinForms中實現(xiàn)打印的基本操作,包括打印預(yù)覽、基本打印、打印對話框使用以及高級設(shè)置。同時,通過一個具體的例子展示了打印多個項并支持分頁的實現(xiàn)方式。希望這篇文章能夠幫助你更好地理解和使用WinForms的打印功能。
該文章在 2024/7/25 0:43:27 編輯過