C# .NET打印时如何实现文本居中显示?
在C# .NET WinForm中实现打印文本居中显示的方法
嘿,我来帮你搞定这个打印文本居中的问题!你用的是VS2010和.NET4.0的WinForm项目对吧?其实核心是要在PrintDocument的PrintPage事件里做文章——毕竟打印的内容都是在这个事件里绘制的。下面给你两种实用的实现方式:
方法一:手动计算坐标实现居中
这种方式需要先算出文本的宽度,再结合打印页面的宽度推导居中的X坐标,步骤很清晰:
- 先给你的
PrintDocument对象绑定PrintPage事件,这是绘制打印内容的核心入口; - 完整的按钮点击事件和打印事件代码示例:
private void btn_Print_Click(object sender, EventArgs e) { PrintDialog pd = new PrintDialog(); PrintDocument pdoc = new PrintDocument(); PrinterSettings ps = new PrinterSettings(); PaperSize psize = new PaperSize("Custom", 100, 200); // 绑定PrintPage事件,用于绘制打印内容 pdoc.PrintPage += Pdoc_PrintPage; pd.Document = pdoc; pd.Document.DefaultPageSettings.PaperSize = psize; if (pd.ShowDialog() == DialogResult.OK) { pdoc.Print(); } } // 处理打印内容的事件方法 private void Pdoc_PrintPage(object sender, PrintPageEventArgs e) { // 要打印的目标文本 string printText = "这是需要居中显示的文本"; // 自定义字体,可根据需求调整 using (Font printFont = new Font("微软雅黑", 12)) { // 计算文本的实际宽度 float textWidth = e.Graphics.MeasureString(printText, printFont).Width; // 计算居中的X坐标:(页面总宽度 - 文本宽度) / 2 float xPos = (e.PageBounds.Width - textWidth) / 2; // Y坐标可自行调整,这里设为50作为起始位置 float yPos = 50; // 绘制居中文本 e.Graphics.DrawString(printText, printFont, Brushes.Black, xPos, yPos); } }
方法二:用StringFormat直接设置对齐
这种方式更简洁,直接通过StringFormat对象指定水平居中,代码修改起来更简单:
只需要替换上面的Pdoc_PrintPage方法即可:
private void Pdoc_PrintPage(object sender, PrintPageEventArgs e) { string printText = "这是需要居中显示的文本"; using (Font printFont = new Font("微软雅黑", 12)) { // 创建格式对象,设置水平居中 StringFormat sf = new StringFormat(); sf.Alignment = StringAlignment.Center; // 定义打印区域矩形:宽度取页面总宽,Y从50开始,高度匹配字体高度 RectangleF printArea = new RectangleF(0, 50, e.PageBounds.Width, printFont.GetHeight(e.Graphics)); // 绘制时传入格式对象,文本会自动在矩形内居中 e.Graphics.DrawString(printText, printFont, Brushes.Black, printArea, sf); } }
小提醒
- 记得用
using语句包裹Font这类实现了IDisposable的对象,避免内存泄漏; - 如果需要考虑打印机的边距限制,可以把
e.PageBounds换成e.MarginBounds,这样绘制的内容会自动避开打印机的不可打印区域,防止文本被裁剪。
内容的提问来源于stack exchange,提问作者User0804
相关产品推荐
相关产品推荐

