ZPL - зебра: печатать текстовый блок по ширине без перезаписи последней строки

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

^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.

Любая помощь будет оценена по достоинству. Благодарю вас!


person Rodrigo Pires    schedule 05.12.2011    source источник


Ответы (3)


Взгляните на команду ^TB. Это предпочтительнее команды ^FB и обрезается, если текст превышает размер, указанный в параметрах TB.

person Ovi Tisler    schedule 05.12.2011
comment
Привет, спасибо за ответ. Я нашел руководство по ZPL с помощью команды ^TB. В нем говорится, что эта команда доступна только для принтеров с версией прошивки V60.14.x, V50.14.x или более поздней. На моем принтере установлена ​​прошивка версии V53.17.9Z. Поэтому команда не сработала, не интерпретировалась... Есть совет? - person Rodrigo Pires; 05.12.2011
comment
V53 — более поздняя версия V50, поэтому команда TB будет работать. Только что попробовал на своем ZM400, V53.17.11. Просто помните, что параметры отличаются от команды ^FB, поэтому вам придется изменить их, вам также может понадобиться переместить команду ^FT, или она вам больше не понадобится. - person Ovi Tisler; 06.12.2011
comment
Мне удалось напечатать с помощью команды TB, я считаю, что проблема была в первом параметре. Теперь основная причина, по которой я пытался использовать команду FB, заключалась в возможности использовать TEXT JUSTIFICATION = J (Justified). Я хочу, чтобы текстовый блок печатался по ширине (т.е. так же, как это делает MS Word). Вы знаете, как я могу добиться этого с помощью команды TB? - person Rodrigo Pires; 06.12.2011
comment
Думаю, я ищу способ использовать команды FB и TB вместе. FB для выравнивания по ОБОСНОВАНИЮ и TB для обрезания текста без перезаписи последней строки. Я пытаюсь объединить их здесь, но.... пока ничего не получилось... =/ - person Rodrigo Pires; 06.12.2011
comment
Обратите внимание, что для его работы команда ^TB должна быть установлена ​​после команды выбора шрифта (^Ax). Это описано в примечаниях здесь: support.zebra.com/cpws/docs/ zpl/TB_Command.pdf — Также убедитесь, что перед первым числовым параметром стоит запятая, например: ^TBN,100,300 - person gregschlom; 22.02.2017

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

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

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

person Levite    schedule 15.07.2013

В зависимости от используемого вами языка программирования более высокого уровня (при условии, что вы используете), вы можете выполнить то же самое (урезать текст для печати до указанного количества символов) с помощью такого кода (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 этой?

person B. Clay Shannon    schedule 04.12.2014