C# 用于收据打印的中心文本

C# 用于收据打印的中心文本,c#,winforms,printing,alignment,C#,Winforms,Printing,Alignment,我有一些代码,用来打印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 F

我有一些代码,用来打印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;
有人能帮我把文字对齐吗

更新:以下是所需的输出:

欢迎来到MSST
收据编号:3
日期:5/24/2014 10:06:22
------------------------------------------

以下是示例的完整代码,使用三种
StringFormats
和添加的一行来显示右对齐的文本。。我还添加了一个前导数字,并将所有内容都转换为浮动。。我使用了一个
面板
来绘制并将布局
矩形
设置为面板的尺寸。当然,您应该使用打印目标

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();


此代码适用于文本中心

Center = Convert.ToSingle(e.PageBounds.Width / 2 - e.Graphics.MeasureString("Valley boulevard Auto Center", HeadingFont).Width / 2)

您希望您的最终输出是什么?(你想要什么居中,右/左对齐?)我喜欢文本“欢迎使用MSST居中”。你应该查看!给drawstring方法一个布局矩形。如果你使用的是单间距字体(Courier New),您可以通过计算字符数并在前面加上适当数量的空格来居中显示文本。您能确定此行的出处吗?请…SizeF layoutSize=new SizeF(panel6.ClientSize.Width-Offset*2,lineheight14);当我在回答中写道Panel6A出现错误时,我使用了一个面板作为布局矩形的宽度。您必须使用其他度量方法来测量所需的宽度,可能是
PageSettings.PrintableArea.width
,但这是由您决定的!如果您想将文本居中或右对齐,您总是需要一些布局矩形-听起来像逻辑l、 是吗?