通过PHP使用EPL打印:存储图像


Printing with EPL via PHP: Storing Images

背景信息:
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端口串行到以太网服务器连接到打印机

打印机配置读数:

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
    );
?>

这本身就很好。

如果在单独的REQUEST:上运行,这也很好

<?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:经过更多的测试,添加新行似乎确实"改善"了这种情况,但并没有解决它。

更新3:经过更多的测试,我认为问题可以缩小到以下范围:

如果运行STORE命令一次,则一切正常。再次运行会导致癫痫发作。

更新4:这似乎是打印机本身或它与应用程序的网络连接方式有问题。打电话给客户并远程打印到他们的,似乎效果很好。

根据更新#4:这似乎是打印机本身或如何与应用程序联网的问题。打电话给客户并远程打印到他们的,似乎效果很好。