2015-05-24 3 views
1

У меня есть код, который я использую, чтобы распечатать квитанцию ​​с 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; 

Может кто-нибудь помочь мне с текстом выравнивать?

UPDATE: Вот желаемый результат:

   Welcome to MSST    
Receipt No : 3 
Date : 5/24/2014 10:06:22 
------------------------------------------ 
+0

Что вы хотите, чтобы ваш конечный результат будет? (Что вы хотите центрировать, выровнять вправо/влево?) –

+0

Id как текст «Добро пожаловать в MSST с центром – Ryanagray

+0

Вы должны посмотреть в [строковые форматы] (https://msdn.microsoft.com/de-de/library/system .drawing.stringformat% 28v = vs.110% 29.aspx)! Придайте методу drawstring правильную компоновку. – TaW

ответ

4

Вот полный код вашего примера, используя три StringFormats и добавляемые линию, чтобы показать правильный выровненный текст .. Я также добавил ведущее число и преобразовал все в floats .. Я использовал Panel, чтобы нарисовать и установить макет Rectangle на размеры панели. Вы должны использовать вашу цель печати, конечно ..

enter image description here

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

Можете ли вы использовать эту строку из ... SizeF layoutSize = new SizeF (panel6.ClientSize.Width - Offset * 2, lineheight14), так как я получаю сообщение об ошибке с panel6 – Ryanagray

+0

Как я писал в своем ответе Я использую панель ширины ширины __layout width__. Вы должны использовать некоторую другую меру для вашей желаемой ширины, возможно, 'PageSettings.PrintableArea.Width', но это вам решать! Вам всегда нужен прямоугольник макета, если вы хотите до __cent er или right align__ text - звучит логично, да? – TaW

Смежные вопросы