首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用PHP打印EPL :存储图像

用PHP打印EPL :存储图像
EN

Stack Overflow用户
提问于 2012-03-22 19:57:15
回答 1查看 4.7K关注 0票数 2

背景资料:

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

I通过2端口串行连接到以太网服务器.

打印机Config读出:

代码语言:javascript
复制
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 

使用,我可以向EPL打印机发送命令。

我可以发送条形码和ASCII行没有问题。

我可以存储图像,然后使用这些图像。

问题

当我将二进制数据与任何其他奇怪的命令混合时,它会中断。

示例:

代码语言:javascript
复制
<?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
    );
?>

它本身就能正常工作。

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

代码语言:javascript
复制
<?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将最终打印存储的徽标。

但如果我这么做

代码语言:javascript
复制
<?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:另一个开发人员尝试了一些东西,它可能已经成功了,需要做更多的测试,但是.对于存储图像后的一些reason...using 4新行来说,似乎是有效的.手册中没有记载这一点。

更新2:经过更多的测试后,添加新的行似乎可以“改善”这种情况,但它并没有解决这个问题。

更新3:经过更多的测试后,我认为问题可以缩小到以下几个方面:

如果您只运行了一次STORE命令,一切都会好起来的。再跑一次会引起癫痫。

更新4:这似乎是打印机本身的一个问题,或者它是如何联网到应用程序的。打电话给客户,远程打印给他们,它似乎工作得很好。

EN

回答 1

Stack Overflow用户

发布于 2012-03-22 22:49:52

根据更新4:这似乎是打印机本身的一个问题,或者它是如何联网到应用程序的。打电话给客户,远程打印给他们,它似乎工作得很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9829540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档