刚学编程那会儿,我最想做的就是让代码干点实在的事。比如,点一下按钮,打印机就吐出一张纸,上面写着我写的文字。这比弹个对话框强多了。C# 就特别适合做这种事,尤其是用 Windows 窗体应用控制打印功能。
准备环境:Visual Studio + .NET
先去官网下载 Visual Studio Community,免费的,装的时候勾选“.NET 桌面开发” workload。装完打开,新建一个项目,选“Windows 窗体应用 (.NET Framework)”或者“.NET”,语言选 C# 就行。
画个简单的界面
拖两个控件到窗体上:一个 TextBox,用来输入要打印的内容;一个 Button,写上“打印”。双击按钮,就会自动生成点击事件的方法,名字通常是 button1_Click。
引入打印命名空间
在代码顶部加上这两句:
using System.Drawing.Printing;
using System.Windows.Forms;
写打印逻辑
在 button1_Click 里面写:
PrintDocument pd = new PrintDocument();
pd.PrintPage += (sender, args) => {
string text = textBox1.Text;
Font font = new Font("宋体", 12);
SolidBrush brush = new SolidBrush(Color.Black);
args.Graphics.DrawString(text, font, brush, 100, 100);
};
try {
pd.Print();
} catch (Exception ex) {
MessageBox.Show("打印失败:" + ex.Message);
}
试试看
输点字,比如“今天学会打印了!”,点按钮。如果电脑连着打印机,它就会打出来。要是没打印机,也可以选择 Microsoft Print to PDF,看看生成的 PDF 长啥样。
加个打印预览
不想每次都真打?加个预览功能。拖一个 PrintPreviewDialog 控件到窗体上,然后改代码:
PrintDocument pd = new PrintDocument();
pd.PrintPage += (sender, args) => {
args.Graphics.DrawString(textBox1.Text, new Font("宋体", 12),
Brushes.Black, 100, 100);
};
printPreviewDialog1.Document = pd;
printPreviewDialog1.ShowDialog();
处理换行和分页
打长文本时,内容可能超出一页。可以在 PrintPage 事件里判断位置,设置 args.HasMorePages = true 来分页。比如:
float yPos = 100;
string[] lines = textBox1.Text.Split('\n');
foreach (string line in lines) {
if (yPos > 800) { // 假设一页最多打到 800 像素
args.HasMorePages = true;
return;
}
args.Graphics.DrawString(line, new Font("宋体", 12),
Brushes.Black, 100, yPos);
yPos += 25;
}
args.HasMorePages = false;
小技巧:调整边距和字体
实际打印时,纸张有边距。可以通过 args.MarginBounds 获取可用区域,别再死盯着 100,100 写。字体也建议让用户选,不然打出来太小或太大都很尴尬。
部署你的程序
右键项目 → 发布,可以生成一个文件夹,把 exe 和依赖都放进去。拷到别的电脑,只要装了对应版本的 .NET,就能运行。别忘了测试打印功能是否正常。