C# 使用 PrintDocument 实现简单文本打印实例
在 Windows Forms 应用程序中,有时需要直接向打印机输出纯文本内容。本文提供一个基于 PrintDocument 和 StreamReader 的完整 C# 示例,展示如何配置打印格式、逐行渲染文字以及自动处理多页打印逻辑。
结果与目标
最终目标是能够指定一个文本文件路径,启动打印任务并将文件内容按预设字体(如宋体、12号字)原样打印到默认打印机上。程序将自动计算每页可容纳的行数,并在内容超出页面时进行分页,确保用户无需手动干预即可打印长文档。
准备条件
- 开发环境:Visual Studio 及 .NET Framework(支持 System.Drawing.Printing 命名空间)。
- 依赖库:
System.IO用于文件流操作,System.Drawing用于图形绘制,System.Windows.Forms用于窗体结构。 - 测试文件:准备一个包含多行文本的文件,例如
F:\Temp.txt,确保路径存在且可读。
第1步:构建打印主窗体
目的:创建一个触发打印流程的主窗体类。
入口:新建 Windows Form 类 PrintFileForm。
动作:在构造函数中实例化打印辅助类并调用其打印方法。
public partial class PrintFileForm : Form
{
public PrintFileForm()
{
InitializeComponent();
// 创建打印文件实例并直接执行打印
PrintFile prinFile = new PrintFile();
prinFile.Print();
}
}
第2步:定义打印文件处理类
目的:封装具体的打印逻辑,分离文件读取与绘图操作。
入口:新建类 PrintFile。
重要参数:设置字体为“宋体”,大小12磅;指定源文件路径。
class PrintFile
{
StreamReader sr = null;
// 定义打印字体
Font printFont = new Font("宋体", 12);
public void Print()
{
try
{
// 打开待打印的文本文件
sr = new StreamReader(@"F:\Temp.txt");
try
{
// 实例化打印文档对象
PrintDocument printDoc = new PrintDocument();
// 订阅打印页面事件
printDoc.PrintPage += printDoc_PrintPage;
// 执行打印
printDoc.Print();
}
finally
{
// 无论成功或失败,确保关闭文件流
if (sr != null)
sr.Close();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}...
第3步:实现 PrintPage 事件处理程序
目的:控制每一页的内容绘制,实现自动分页。
入口:添加 printDoc_PrintPage 方法。
关键逻辑:
- 计算行数:根据可用打印区域高度和字体高度,计算当前页能显示的最大行数(
pageLine)。 - 循环绘制:遍历文件,使用
Graphics.DrawString将每行文字画到页面上。起始位置由MarginBounds.Top和偏移量决定。 - 分页判断:如果读完当前页后文件中仍有剩余内容(
line != null),设置e.HasMorePages = true触发下一页打印;否则设为 false 结束打印。
void printDoc_PrintPage(object sender, PrintPageEventArgs e)
{
string line = null;
// 计算一页可容纳的行数
float pageLine = e.MarginBounds.Height / printFont.GetHeight(e.Graphics);
// 循环打印每一行,直到满页或文件结束
for (int count = 0; count < pageLine && ((line=sr.ReadLine())!=null); count++)
{
// 计算当前行的垂直位置
float singleLine = e.MarginBounds.Top + (count * printFont.GetHeight(e.Graphics));
// 绘制文字
e.Graphics.DrawString(line, printFont, Brushes.Black, e.MarginBounds.Left, singleLine);
}
// 判断是否继续打印下一页
if (line != null)
e.HasMorePages = true;
else
e.HasMorePages = false;
}
完成判断
运行应用后,若未捕获异常,系统将弹出打印机选择对话框或直接发送任务至默认打印机。检查已打印纸张,确认文字无重叠、无截断,且多页文档分页正确。控制台若有输入错误信息,请检查 F:\Temp.txt 路径权限或文件编码是否为 ANSI/UTF-8 兼容。
简要总结
通过上述步骤,我们实现了基于 C# 的基本文本打印功能。关键在于利用 PrintPage 事件的多次触发机制来处理长文本,并通过 HasMorePages 属性控制分页流程。对于更复杂的报表或富文本打印,建议引入第三方控件或更精细的布局管理。
以上就是 C# 实现简单打印的详细内容,更多关于 C# 打印技巧的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









