Печать с помощью EPL через PHP: хранение изображений - PullRequest
2 голосов
/ 22 марта 2012

Справочная информация:Mac OS X Lion 10.7.3 (11D50b)EPL: http://en.wikipedia.org/wiki/Eltron_Programming_Language
Руководство по EPL: http://www.geksagon.ru/i/2/EPL2_Manual.pdf

Я подключаюсь к принтеру через 2-портовый последовательный порт к серверу Ethernet.

Показание конфигурации принтера:

UKQ1935H U UPS V4.14   
S/N: 64A024100181
Serial port:96,N,8,1
Image buffer size:0245K
Fmem:001.0K,059.9K avl
Gmem:000K,0058K avl
Emem:010K,0058K avl
I8,C,001 rY
S4 D10 R000,000 ZT UN
q832 Q609,24
Option:D
oUs,t,u
10 19 29 

Использование PHP Я могу отправлять команды на принтер EPL.Я могу отправить штрих-кодов и ASCII линий без проблем.Я могу хранить изображения, а затем использовать их.

Проблема :

Когда я смешиваю двоичные данные с любыми другими странными командами, они ломаются.

Пример:

<?php
    $filename = WWW_ROOT . 'img/labels/mylogo.pcx';
    $handle = fopen( $filename , 'r' );
    $image = fread( $handle , filesize( $filename ) );
    $bytes = strlen( $image );
    fclose( $handle );

    # Store the image.
    # Delete twice when dealing with Printer Flash
    $commands = array(
        'GK"MYLOGO"', # Del
        'GK"MYLOGO"', # Del
        'GM"MYLOGO"' . $image_bytes, # Store
        $image_data # Binary data
    );
?>

Это отлично работает само по себе.

Это также хорошо работает - если запустить по отдельному запросу:

<?php
    $commands = array(
        '', # <-- As per the manual, a blank line prior to a new label.
        'N', # Clear Image Buffer, New Label
        'GG30,10,"MYLOGO"', # Get image variable MYLOGO
        'P' # Print
    );
?>

Таким образом, после сохранения изображения MYLOGO завершит печать сохраненного логотипа.

Но если я сделаю это:

<?php
     $commands = array(
        'GK"MYLOGO"', # Del
        'GK"MYLOGO"', # Del
        'GM"MYLOGO"' . $image_bytes, # Store
        $image_data, # Binary data
        '', # <-- As per the manual, a blank line prior to a new label.
        'N', # Clear Image Buffer, New Label
        'GG30,10,"MYLOGO"', # Get image variable MYLOGO
        'P' # Print

     );
?>

Он печатает логотип, но затем начинает зависать.Если бы у меня были инструкции ASCII, они не были бы выполнены должным образом.

Выполнение дампа с принтера показывает, что выполняется первая последовательность команд, но как только она попадает в двоичные данные, она начинает получать ее, затем в СРЕДНЕМ и КОНЦЕ двоичных данных она начинает пытаться запуститьследующий набор команд (команды ASCII), а затем двоичный файл продолжается.

Это, конечно, означает, что он не будет печататься ... потому что команда P не была получена после данных изображения.

Почему он это делает?

Так оно и работает: когда к HTTP-запросам делается выдача наборов команд отдельно (новые соединения с сокетами).Он не работает, когда оба набора команд находятся в одном и том же HTTP-запросе.

Если двоичные данные создаются с помощью других команд - принтер переходит в «нечетное» состояние, и для его запуска необходимо выключить и включить питание.получение команд еще раз.

Конечная цель : возможность передавать двоичные данные с другими командами, и они не имеют указаний.

Пример кода: https://gist.github.com/de3a1ba2f0decc36b6e6

Изображения

Ввод дампа: http://imageshack.us/photo/my-images/193/photo1any.jpg/

Начало дампа: http://imageshack.us/photo/my-images/37/photo2ln.jpg/

Отображение в середине дампа: http://imageshack.us/photo/my-images/820/photosaz.jpg/

Как это "должно" выглядеть: http://imageshack.us/photo/my-images/832/photo5uc.jpg/

Как это выглядит только с ASCII и штрих-кодами: http://imageshack.us/photo/my-images/23/photo4ucf.jpg/

Как это выглядит испорчен : http://imageshack.us/photo/my-images/708/photo3si.jpg/


Обновление 1: другой разработчик что-то пробовал, и это, возможно, сработало, нужно провести дополнительное тестирование, но ... по НЕКОТОРЫМ причинам ...использование 4 новых строк после сохранения изображения, кажется, работает ... это не задокументировано в руководстве.

Обновление 2: после дополнительного тестирования добавление нового linКажется, что это «улучшает» ситуацию, но это не исправляет ее.

Обновление 3: После дополнительного тестирования я думаю, что проблему можно сузить до следующего:

Если вы запуститеКоманда STORE один раз, все хорошо.Повторный запуск приводит к изъятиям.

Обновление 4: похоже, это проблема самого принтера или его подключения к приложению.Позвонил клиенту и распечатал его на расстоянии, и, кажется, он отлично работает.

1 Ответ

0 голосов
/ 23 марта 2012

Согласно обновлению № 4: Это, похоже, проблема с самим принтером или с тем, как он подключен к приложению.Позвонил клиенту и распечатал его на расстоянии, и, кажется, он отлично работает.

...