收据打印的中心文本
我有一些代码,我用它来打印C#的收据。
下面的代码打印正常,但我正在努力调整左右中心的文本,
Graphics graphics = e.Graphics; Font font = new Font("Courier New", 10); float fontHeight = font.GetHeight(); int startX = 0; int startY = 0; int Offset = 0; graphics.DrawString("Welcome to MSST", new Font("Courier New", 14), new SolidBrush(Color.Black), startX, startY + Offset); Offset = Offset + 20; graphics.DrawString("Recept No :" + receptno + 1, new Font("Courier New", 14), new SolidBrush(Color.Black), startX, startY + Offset); Offset = Offset + 20; graphics.DrawString("Date :" + DateTime.Today, new Font("Courier New", 12), new SolidBrush(Color.Black), startX, startY + Offset); Offset = Offset + 20; graphics.DrawString("------------------------------------------", new Font("Courier New", 10), new SolidBrush(Color.Black), startX, startY + Offset); Offset = Offset + 20;
任何人都可以帮我解决文字对齐吗?
更新:这是所需的输出:
Welcome to MSST Receipt No : 3 Date : 5/24/2014 10:06:22 ------------------------------------------
这是你的例子的完整代码,使用三个StringFormats
和一个添加的行来显示右对齐文本..我还添加了一个前导数字并将所有内容转换为floats
…我使用了一个Panel
来绘制并设置布局Rectangle
小组的规模。 你应该使用你的打印目标,当然..
int receptno = 42; Graphics graphics = e.Graphics; Font font10 = new Font("Courier New", 10); Font font12 = new Font("Courier New", 12); Font font14 = new Font("Courier New", 14); float leading = 4; float lineheight10 = font10.GetHeight() + leading; float lineheight12 = font12.GetHeight() + leading; float lineheight14 = font14.GetHeight() + leading; float startX = 0; float startY = leading; float Offset = 0; StringFormat formatLeft = new StringFormat(StringFormatFlags.NoClip); StringFormat formatCenter = new StringFormat(formatLeft); StringFormat formatRight = new StringFormat(formatLeft); formatCenter.Alignment = StringAlignment.Center; formatRight.Alignment = StringAlignment.Far; formatLeft.Alignment = StringAlignment.Near; SizeF layoutSize = new SizeF(yourPrintAreaWidth - Offset * 2, lineheight14); RectangleF layout = new RectangleF(new PointF(startX, startY + Offset), layoutSize); Brush brush = Brushes.Black; graphics.DrawString("Welcome to MSST", font14, brush, layout, formatCenter); Offset = Offset + lineheight14; layout = new RectangleF(new PointF(startX, startY + Offset), layoutSize); graphics.DrawString("Recept No :" + receptno + 1, font14, brush, layout, formatLeft); Offset = Offset + lineheight14; layout = new RectangleF(new PointF(startX, startY + Offset), layoutSize); graphics.DrawString("Date :" + DateTime.Today, font12, brush, layout, formatLeft); Offset = Offset + lineheight12; layout = new RectangleF(new PointF(startX, startY + Offset), layoutSize); graphics.DrawString("".PadRight(46,'_'), font10, brush, layout, formatLeft); Offset = Offset + lineheight10; layout = new RectangleF(new PointF(startX, startY + Offset), layoutSize); graphics.DrawString("copyright SO", font10, brush, layout, formatRight); Offset = Offset + lineheight10; font10.Dispose(); font12.Dispose(); font14.Dispose();
- 如何在每天的指定时间执行Windows服务
- NHibernate – not-null属性引用null或transient值
- Directory.GetCurrentDirectory()根据命令行参数返回不同的结果
- Visual Basic关键字的C#等价物:’With’…’End With’?
- 使用DataReader和OLEDB Jet数据提供程序读取CSV文件时,如何控制列数据类型?
- 如何使用c#通过调用该软件的注册表文件中列出的软件UninstallString来卸载软件但该进程不起作用
- 将OAuth 2与桌面c#应用程序一起使用
- 如何将字节数组转换为图像并在datagrid中显示?
- 我正在尝试编组从C到C#的结构,不知道从哪里开始