网站首页 > 技术文章 正文
以下是一个基于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-28 5分钟掌握 c# 网络通讯架构及代码示例
- 2025-07-28 C#自学——基础语法(看看就行)(c#怎么自学)
- 2025-07-28 C# 实现固定长度的队列Queue(c#队列事件)
- 2025-07-28 c# 100秒倒计时功能的C#代码示例(基于Windows Forms):
- 2025-07-28 c#夯实基础-委托之Action(c# action 委托)
- 2025-07-28 C#程序设计_窗体(c#窗体是什么)
- 2025-07-28 其他类(番外) C#(其他类型的文件怎么打开)
- 2025-07-28 C#.NET 并发令牌 详解(c# 并发 parallel)
- 2025-07-28 c#,委托与事件,发布订阅模型,观察者模式
- 2025-07-28 Protobuf高级用法 - Options以及Extensions
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)