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

时间:2012-03-22 19:57:16

标签: php printing binary epl

背景资料:
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指令,他们就不会完成它们。

从打印机执行转储显示第一个命令序列运行,但是一旦它进入二进制数据就开始接收它,然后在二进制数据的MIDDLE和END中它开始尝试运行下一组命令(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:这似乎是打印机本身的问题或者它如何与应用程序联网。打电话给客户并远程打印到他们的网站上,看起来效果很好。

1 个答案:

答案 0 :(得分:0)

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