ZPL - зебра: вывести выровненный текстовый блок без перезаписи последней строки - PullRequest
4 голосов
/ 05 декабря 2011

Я использую следующую команду для печати выровненного текста:

^FB1800,3,0,J^FT100,200^A0B,26,26^FH\^FDLONG TEXT TO BE PRINTED, WHICH DOESNT FIT IN ONLY 3 LINES...^FS

Команда ^ FB1800,3,0, J печатает блок поля шириной 1800 точек, максимум 3 строки, выровненный.

Проблема в том, что если текст превышает максимальное количество строк, он перезаписывает последнюю строку! :( Это, конечно, делает текст последней строки нечитаемым.

Как мне этого избежать? Кто-нибудь знает, есть ли способ обрезать превышающий текст?

В документации точно сказано, что это происходит:

Текст, превышающий максимальное количество строк, перезаписывает последнюю строку. Изменение размера шрифта автоматически увеличивает или уменьшает размер блока.

Для справки: я использую принтер Zebra 220Xi4.

Любая помощь будет оценена. Спасибо!

Ответы [ 3 ]

5 голосов
/ 05 декабря 2011

Посмотрите на команду ^TB.Он предпочтительнее команды ^FB и усекается, если текст превышает размер, определенный в TB params

1 голос
/ 15 июля 2013

У меня была примерно такая же проблема, что исправило это в моем случае - хотя и не самым элегантным способом - это указать большее количество максимальных строк, а затем отформатировать так, чтобы только первые 3 находились ввидимая область.

В вашем случае это будет, например, ^FB1800,7,0,J вместо ^FB1800,3,0,J

Это, по крайней мере, сразу исправило для меня, потому что я печатаю этот текст внизуэтикетка.Если вам нужно, чтобы он находился где-то посередине или сверху, могут возникнуть некоторые хитрости с размещением (белого) прямоугольника поверх области переполнения, поскольку принтеры Zebra, похоже, отрисовывают перед печатью.Надеюсь, это поможет.

0 голосов
/ 04 декабря 2014

В зависимости от языка программирования более высокого уровня, который вы используете (при условии, что вы это делаете), вы можете выполнить то же самое (укоротить текст для печати до указанного числа символов) с помощью кода, подобного этому (C # показан здесь ):

public void PrintLabel(string price, string description, string barcode)
{
    const int MAX_CAPS_DESC_LEN = 21;
    const int MAX_LOWERCASE_DESC_LEN = 32;
    try
    {
        bool descAllUpper = HHSUtils.IsAllUpper(description);
        if (descAllUpper)
        {
            if (description.Length > MAX_CAPS_DESC_LEN)
            {
                description = description.Substring(0, MAX_CAPS_DESC_LEN);
            }
        }
        else // not all upper
        {
            if (description.Length > MAX_LOWERCASE_DESC_LEN)
            {
                description = description.Substring(0, MAX_LOWERCASE_DESC_LEN);
            }
        }
        . . .

Это то, что я использую; есть ли причина предпочесть «сырую» команду ^ TB этой?

...