Изображение (PCX) для принтера EPL2 Zebra
У меня проблемы с производством и загрузкой графики на принтер EPL2.
Я буквально устала от каких-либо программ и доступна в Интернете, и я в растерянности.
У меня есть 1-битный файл, который я пытаюсь загрузить с помощью следующего скрипта..
setppi.txt
GK"NAMEPCX"
GK"NAMEPCX"
GM"NAMEPCX"3042
а затем загрузить с
copy setppi.txt+ppirmt.pcx lpt1/b
Кто-нибудь с опытом получил какие-нибудь советы, прежде чем я оторву остатки моих волос? Я почти уверен, что эта проблема связана с созданием pcx, но перепробовав все варианты, я не уверен относительно своего следующего шага.
4 ответа
Вот способ, которым я нашел, чтобы правильно создать PCX:
В gimp сохраните файл как 1-битный (черно-белый) BMP. Не выбирайте PCX, потому что сохраненный формат не является 1-битным PCX, как того требует принтер!
Используйте программу конвертации imagemagick для конвертации BMP в PCX.
Еще одна проблема, с которой я столкнулся после того, как получил это, была то, что графика все еще была повреждена, это была проблема кодовой страницы, так что следите за этим.
Вы не упоминаете, какой язык программирования вы используете.
Если это C# (или.NET в целом), то вот сообщение в блоге о печати изображений с помощью EPL:
Использование команды EPL2 GW для отправки изображения на термопринтер Zebra
И еще одно сообщение в блоге от того же парня, с которого я начал печатать EPL на принтерах Zebra с помощью C#.
Существует два способа вывода графики 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 000 циклов записи).
Так что может показаться, что используя GW
записать imag непосредственно в буфер изображения вместо использования 3-х шагов GK GM GG
может быть лучшим решением.
Отказ от ответственности: в настоящее время я пишу SVG-to-EPL-транспортер, который можно найти здесь
Я столкнулся с той же проблемой в последнее время, и решил ее с помощью отправки GW
-команда к принтеру.
Основное отличие GK
- GK
- GM
- GG
является то, что вы не отправляете PCX-заголовок, а скорее необработанные двоичные данные (afaik без сжатия 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)
,