网站首页 > 文章精选 正文
以下是一个基于C#的打印框架示例代码,包含打印预览和实际打印功能:
using System.Drawing.Printing;
using System.Windows.Forms;
public class PrintExample
{
private PrintDocument printDocument = new PrintDocument();
private PrintPreviewDialog previewDialog = new PrintPreviewDialog();
public void InitializePrinting()
{
// 设置打印文档属性
printDocument.PrintPage += PrintPageHandler;
printDocument.DefaultPageSettings.Landscape = false; // 纵向打印
// 初始化预览对话框
previewDialog.Document = printDocument;
previewDialog.ClientSize = new System.Drawing.Size(800, 600);
}
public void ShowPrintPreview()
{
previewDialog.ShowDialog();
}
public void PrintDocument()
{
using (PrintDialog printDialog = new PrintDialog())
{
printDialog.Document = printDocument;
if (printDialog.ShowDialog() == DialogResult.OK)
{
printDocument.Print();
}
}
}
private void PrintPageHandler(object sender, PrintPageEventArgs e)
{
// 打印内容绘制区域
float leftMargin = e.MarginBounds.Left;
float topMargin = e.MarginBounds.Top;
// 示例:打印多行文本
string[] lines = new string[]
{
"打印示例",
"--",
"这是第一行打印内容",
"这是第二行打印内容",
"日期:" +
System.DateTime.Now.ToString()
};
using (Font font = new Font("宋体", 12))
{
for (int i = 0; i < lines.Length; i++)
{
e.Graphics.DrawString(lines[i], font, Brushes.Black,
leftMargin, topMargin + i * 20);
}
}
// 标记是否还有更多页面(多页打印时使用)
e.HasMorePages = false;
}
}
使用说明:
1. 初始化打印功能:
PrintExample printer = new PrintExample();
printer.InitializePrinting();
2. 显示打印预览:
printer.ShowPrintPreview();
3. 执行实际打印:
printer.PrintDocument();
扩展功能建议:
1. 图像打印:在PrintPageHandler中使用e.Graphics.DrawImage()方法
2. 分页处理:通过e.HasMorePages和PrintDocument.Print()实现多页打印
3. 自定义页面设置:使用PageSettings类调整纸张大小、方向等
4. 打印进度反馈:订阅
PrintDocument.PrintingEvent事件
注意事项:
- 需要添加对System.Drawing和System.Windows.Forms的引用
- 实际打印前建议先进行预览验证
- 处理大尺寸内容时注意内存管理
- 跨平台应用建议使用WPF的PrintDialog替代
如需更复杂的报表打印功能,可考虑使用第三方库如DevExpress或Telerik的打印组件。
猜你喜欢
- 2025-07-17 C#学习随笔—自定义控件(面板)(c#自定义控件三个步骤)
- 2025-07-17 C#基础:ref 参数(c#中rectangle)
- 2025-07-17 C# 值类型和引用类型讲解(c#引用类型分为四类)
- 2025-07-17 C#指针的应用(c#指针操作)
- 2025-07-17 C#.NET in、out、ref详解(c# inotify)
- 2025-07-17 C#数组(C#数组排序)
- 2025-07-17 可视化仪表盘控件再更新:增强数据可视化、Winforms功能
- 2025-07-17 C#实战036:各种泛型的定义和使用详解
- 2025-07-17 C#中的9个“黑魔法”与“骚操作”
- 2025-07-17 什么是C#标识符,如何定义?什么是C#保留字?都有哪些保留字?
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)
- fmt.println (52)