Member 11381811 Ответов: 2

Мне нужно слово wrapp средняя строка


как мне отформатировать эту строку

у меня есть 70-миллиметровый размер бумаги на моем принтере EPSON.
нужно использовать класс PrintDocument
мне просто нужно напечатать с помощью e.Graphics эту строку

если строка длиннее, чем размер бумаги, мне нужно пчела, как это

3 x cola + burger + somelong        12,00
itemname with modifiers etc//   


У меня есть один элемент класса со свойствами
количество = 3
имя = Кока-Кола + бургер + somelongstring
цена = 12,00

мне нужно решение для этого - это решение не работает.
Всегда мне нужно выровнять направо в первой строке текста цена
затем, если мы пойдем влево, мне нужно количество как отдельная строка + "x" + ItemName как какая-то другая строка, но нужно обертывать слово, если эта строка слишком длинная. Поэтому мне нужно решение, как word wrapp middle string в строку и получить то, что я показываю на предварительном просмотре..

Что я уже пробовал:

public string FormatLineItem(int lineType, float linewidth, int quantity, string name, string amount)
        {
            float qtyWidth = 3;
            float amtWidth = 5;
            float nameWidth = linewidth - (qtyWidth + amtWidth);
            float padWidth = (linewidth + qtyWidth + 3) - nameWidth;
            string result = string.Empty;

            switch (lineType)
            {
                case 1: // data
                    result = string.Format("{0:#0}x {1} {2:##.#0}", quantity, name.PadRight((int)padWidth), amount);
                    break;
                case 2: // header
                    result = string.Format("QTY {0} AMOUNT", name.PadRight((int)padWidth));
                    break;
                case 3: // footer
                    result = string.Format("{0:##.#0}", amount).PadLeft((int)(linewidth - amtWidth));
                    break;
                default:
                    break;
            }

            return result;
        }

2 Ответов

Рейтинг:
1

Gerry Schmitz

Используйте WPF для создания "визуального" чека, который масштабируется до 70 мм (который отправляется на принтер).

Поместите "длинную строку" в текстовый блок с включенным "переносом текста".

Вы можете указать, как "разбить" (на слова).

Он даже может напечатать"...", если у вас совсем не хватит места.


Member 11381811

Можете ли вы дать какое-то решение для этого?

Рейтинг:
0

OriginalGriff

Когда вы используете PrintDocument, вы используете графику.DrawString для форматирования - вы не можете форматировать без графического контекста и данных шрифта и кисти, поскольку они являются фундаментальными для размера и Кернинга отдельных символов, что влияет на точку, в которой текст должен быть обернут.

И DrawString имеет несколько перегрузок, в том числе пару, которые принимают прямоугольник: Графика.Метод DrawString (Система.Чертеж) | Microsoft Docs[^] Когда вы используете это, он будет автоматически обернут, чтобы поместиться в пределах горизонтальной ширины прямоугольника, и только усечен, когда он достигнет вертикального предела.

Попытка "сделать wordwrap" без фактической информации о шрифте и кисти не будет работать, если вы всегда не используете непропорциональный шрифт и определенный вес строки.


Member 11381811

"Когда вы используете это, он будет автоматически обернут, чтобы поместиться в пределах горизонтальной ширины прямоугольника, и только усечен, когда он достигнет вертикального предела"...можете ли вы написать мне решение для этого, я пытаюсь это сделать, но оно не работает...

OriginalGriff

Перейдите по ссылке - она включает в себя пример кода!