Изображение (PCX) для принтера EPL2 Zebra

У меня возникли проблемы с созданием и загрузкой графики на принтер EPL2.

Утомив буквально любое доступное программное обеспечение и просмотрев Интернет, я в растерянности.

У меня есть 1-битный файл, который я пытаюсь загрузить с помощью следующего скрипта.

setppi.txt

GK"NAMEPCX"
GK"NAMEPCX" 
GM"NAMEPCX"3042

а затем загрузить с помощью

copy setppi.txt+ppirmt.pcx lpt1/b

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


person Gavin    schedule 15.06.2010    source источник
comment
ты когда-нибудь работал над этим? Я застрял, пытаясь сделать то же самое   -  person fearofawhackplanet    schedule 04.01.2011
comment
@fearofawhackplanet В настоящее время я реализую POC для преобразования SVG в EPL — вы можете найти соответствующий код для преобразования и отправки .png-файлов на принтер как PCX: github.com/dittodhole/dotnet-System.Svg.Render.EPL   -  person    schedule 15.05.2016


Ответы (4)


Вот способ, которым я нашел правильное создание PCX:

В gimp сохраните файл как 1-битный (черно-белый) BMP. Не выбирайте PCX, потому что сохраненный формат не является 1-битным PCX, как того требует принтер!

Используйте программу преобразования imagemagick для преобразования вашего BMP в PCX.

Другая проблема, с которой я столкнулся после того, как я это сделал, заключалась в том, что графика все еще была повреждена, это была проблема с кодовой страницей, так что следите за этим.

person rkone    schedule 21.02.2011
comment
@Android поддержал... когда я пытаюсь распечатать изображение, я получаю только один ряд точек. в чем проблема с кодовой страницей? - person Michael; 07.03.2017

Вы не указываете, какой язык программирования вы используете.

Если это C# (или .NET вообще), то вот запись в блоге о печати изображений с помощью EPL:
Использование команды EPL2 GW для отправки изображения на термопринтер Zebra

И еще одно сообщение в блоге от того же парня, , благодаря которому я начал печатать EPL на принтерах Zebra с помощью C#.

person Christian Specht    schedule 17.05.2013
comment
Сейчас эти ссылки не работают. У вас есть ссылка на подобное решение? - person Jason Foglia; 02.08.2018
comment
@JasonFoglia: Да, сайта больше не существует. Я только что изменил ссылки на Wayback Machine, которая, к счастью, заархивировала сайт. - person Christian Specht; 03.08.2018

Существует два способа вывода графики PCX с использованием языка EPL2. Первый - тот, который вы предложили:

GK"namepcx"
GK"namepcx"
GM"namepcx",3042
..... and here follows monochrome PCX data ...
..... with 128-bit header and following pixel data 1 bit-per pixel..

позже вы сможете записать этот сохраненный "namepcx" в буфер изображений принтера через GM, однако я потратил два дня, пытаясь сохранить PCX, но он никогда не сохранялся правильно. Поэтому я просто использовал команду GW для записи данных пикселей непосредственно в буфер изображения принтера. Избегание «хранения во флэш-памяти». Также изначально это «флэш»-хранилище через GM предназначалось для хранения некоторого изображения (например, логотипа), которое будет повторяться на всех этикетках. Таким образом, вы можете сохранить его один раз, а затем распечатать 10 000 этикеток с одним и тем же логотипом. Однако, если вы печатаете из java, обычно вы будете печатать много разных изображений на разных этикетках. Таким образом, если вы будете хранить на флешке новое изображение для каждой метки, то флеш-память очень быстро "изнашивается". (Например, в инструкции к принтеру LP 2824 сказано, что флэш-память рассчитана только на 100 тыс. циклов записи).

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

person Dimitry K    schedule 01.09.2013

Отказ от ответственности: в настоящее время я пишу преобразователь SVG в EPL, который можно найти здесь

Недавно я столкнулся с той же проблемой и решил ее, отправив GW-команда для принтера.

Основное отличие от GK-GK-GM-GG заключается в том, что вы отправляете не заголовок PCX, а необработанные двоичные данные (на самом деле без сжатия LRE).

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

[NotNull]
public IEnumerable<byte> GetRawBinaryData([NotNull] Bitmap bitmap,
                                          int octetts)
{
  var height = bitmap.Height;
  var width = bitmap.Width;

  for (var y = 0;
        y < height;
        y++)
  {
    for (var octett = 0;
          octett < octetts;
          octett++)
    {
      var value = (int) byte.MaxValue;

      for (var i = 0;
            i < 8;
            i++)
      {
        var x = octett * 8 + i;
        var bitIndex = 7 - i;
        if (x < width)
        {
          var color = bitmap.GetPixel(x,
                                      y);
          if (color.A > 0x32
              || color.R > 0x96 && color.G > 0x96 && color.B > 0x96)
          {
            value &= ~(1 << bitIndex);
          }
        }
      }

      yield return (byte) value;
    }
  }
}

То, что вы должны иметь в виду для конверсий:

  • 1: белая точка
  • 0: черная точка
  • width должно быть кратно 8 (поскольку мы отправляем байты) — приведенный выше код позаботится об этом путем заполнения
  • вращение/ориентация этикетки!
  • здесь реализован какой-то порог...

Я также реализовал GM-GG, но это выходит за рамки этого ответа. Соответствующий код можно найти в EplCommands.StoreGraphics(bitmap:Bitmap,name:string).

person Community    schedule 15.05.2016