2010-06-15 6 views
1

У меня возникли проблемы с созданием и загрузкой графики на принтер EPL2.Изображение (PCX) для EPL2 Принтер Zebra

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

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

setppi.txt

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

, а затем загрузить с

copy setppi.txt+ppirmt.pcx lpt1/b 

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

+1

Вы когда-нибудь работали над этим? Я застрял, пытаясь сделать то же самое – fearofawhackplanet

+0

@fearofawhackplanet В настоящее время я внедряю POC для перевода SVG в EPL - вы можете найти соответствующий код для преобразования и отправки * .png * -файлов на принтер как PCX: https: // github.com/dittodhole/dotnet-System.Svg.Render.EPL –

ответ

3

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

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

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

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

+1

Какая проблема с кодировкой и как вы ее решили? – Andrioid

+0

@ Андроид прикомандирован ... когда я пытаюсь напечатать изображение, я просто получаю один ряд точек. Какова была проблема с кодировкой? – Michael

1

Существует два способа вывода графики 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 говорит, что флэш-память имеет только 100k циклов записи).

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

0

Отказ от ответственности: В настоящее время я пишу SVG-к-EPL-transpiler, который можно найти here

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

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

Я использовал следующий (не оптимизированный/наивный) код 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).

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