采用PHP在终端上进行打印控制
众所周知,PHP主要用于服务器端的开发,本博曾讲到采用PHP开发终端系统。其实除了采用PHP进行终端系统的开发,还可以采用PHP在终端上进行终端打印机的控制。
实际上在终端上进行打印机的控制,非常简单!大家知道ASCII码吧?学过计算机的人都应该知道,在讲计算机基础时,都会讲ASCII码!其中,就有关于一些控制字符,不知道的XDM呢,可以参考本博所的ASCII码。其中,十进制031之前的那些编码,基本上都是一些控制字符,这些字符在屏幕上不会显示成键盘上的特定字符,而是显示为一些特殊的控制字符,比如说F12显示为^Oz,看起来是否相关奇怪?有关于这方面的详细资料,还请关注本博,本博近期内将会把这方面的问题一一进行说明。
好了,谈到本文的主题了,采用PHP进行终端打印机的控制。什么?PHP控制打印机?有没有听错?不错,你没有听错,的确是采用PHP控制终端打印机进行相应内容的打印!
是不是感觉很茫然?没有关系,听本博慢慢道来!
要采用PHP控制终端的打印机,首先需要确认终端打印机正常联机,如果不知道什么叫正常联机,先去看看打印机方面的文章吧!能够正常联机后,只需要在PHP中抛出相关的打印机控制字符,就可以打开打印机的端口了,然后就只管echo或者print你要打印机打印的内容即可。输出完了以后呢,就只需要再输出打印机端口命令,即调用关闭打印机的控制符实现打印机的关闭。此时由于打印机不会自动进行纸张的处理,因此还需要在PHP进行纸张的控制。
由于和终端联机的打印机有很多种,这里以得实2100为例,其打印机主要是以OKI仿真命令的方式进行处理,因为我们在操作该打印机时,只需要查看该打印机所提供的指令序列,然后在PHP中输出该指令序列即可。例如,进入打印机的透明打印是ESC [5i,我们只需要在PHP输出该指令即可打开透明打印方式。但实际上直接输出ESC是达不到效果的,此时需要查看ESC的ASCII码表,其相应的ASCII码的八进制为033,那么只需要echo “\033 [5i”;这么一条指令即可打印得实2100打印机的透明打印。
怎么?不相信这么简单?不错,这就是现实!确实很简单,PHP操作终端打印机就是这么简单!你也可以实现!
以下是我在进行这方面的开发时所写的一个DEMO。希望能够各位看官一点启发!
echo "\033[5i";//进入透明打印
echo "this is test.\n";
echo "this is test 这是否可以打印机.\n";
echo str_pad(" ", 30) . "this is 这是非颠倒.\n";
echo "this 你死我活 is test.\n";
echo "this is test.\n";
echo str_pad(" ", 10) . "this is test.\n";
echo "this is test.\n";
echo "this is 工作队 test.\n";
echo "this is test.\n";
echo str_pad(" ", 20) ."this is test.\n";
//echo "\33[0i" ;
echo "\014";//换页
echo "\033[4i";//关闭透明打印
怎么样,看明白没有?没看懂的,可以给我留言,我会以最快的速度回复您!
DEMO呢?
上了,呵呵,因为在写文章的时候太晚了,DEMO今天才发的。。
虽然可以这么做,但是有多少人愿意这么做呢
比如LINUX下我还是比较喜欢用SHELL来完成相应的工作…
@Claymore
当然可以采用SHELL来实现,但相对而言,SHELL与WEB通信如何呢?与web交换数据呢?
那怎样实现服务端打印呢?
即是在客户端在WEB上传一个word文档,然后在服务端的打印机自动打印出文档。
服务器已经接上打印机。
这个应用我还不曾开发过,等这个项目完后,空闲一点,定去试试这需求
不过呢,这种需求可采用打印服务器或者共享打印机方式解决
如果做成记账打印系统,共享打印机就解决不了啦。如果真能实现服务端打印就说明真的很强大了。
这个东东理论上应该可以解决的,也曾看到过类似于这方面的资料
待这周忙后,定当处理这个问题
作者你倒是说你另外的包是什么呀,我装了ncurses了,运行你的程序不成功那,作者速速回答广大爱好ncurses的人吧,
呵呵,这个倒是个问题哈,安装ncurses包后,可能还要安装一些其它包,你的程序运行不成功?提示些什么呢?如果你的NCURSES正常安装成功的话, 那就应该能够运行的。
另外,这个打印控制涉及到打印机,你直接在LINUX环境下运行可能看不到效果,可能需要在终端看效果。
@achao
to Flster:
你谈到的关于实现服务器端打印的问题,其实可以解决的。
当然,这个需要添加PHP的一个扩展:Printer。这个扩展就支持调用服务器端的打印机进行文档的打印。
当然,需要打印的内容需要采用PJL (Printer Job Language)处理后才能送到打印去处理。
我看了之后还是不太明白,我现在就在试着控制一台打印机,但是有很多的问题啊,我刚才把你的代码复制了,但是并不能实现打印,怎么回事啊?我买的是一台小票打印机。 不知道能否加你为好友,具体问你解决方法呢?
这个没有问题,一起探讨一下就是。