首页 > PHP教程, 电脑使用 > 采用PHP在终端上进行打印控制

采用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";//关闭透明打印

怎么样,看明白没有?没看懂的,可以给我留言,我会以最快的速度回复您!

相关文章

PHP教程, 电脑使用 , , , ,

  1. 夜雨
    2009年6月4日09:27 | #1

    DEMO呢?

  2. 2009年6月4日10:24 | #2

    上了,呵呵,因为在写文章的时候太晚了,DEMO今天才发的。。

  3. 2009年6月4日18:18 | #3

    虽然可以这么做,但是有多少人愿意这么做呢
    比如LINUX下我还是比较喜欢用SHELL来完成相应的工作…

  4. 2009年6月4日18:41 | #4

    @Claymore
    当然可以采用SHELL来实现,但相对而言,SHELL与WEB通信如何呢?与web交换数据呢?

  5. Flster
    2009年6月6日16:41 | #5

    那怎样实现服务端打印呢?
    即是在客户端在WEB上传一个word文档,然后在服务端的打印机自动打印出文档。
    服务器已经接上打印机。

  6. 2009年6月7日17:36 | #6

    Flster :
    那怎样实现服务端打印呢?
    即是在客户端在WEB上传一个word文档,然后在服务端的打印机自动打印出文档。
    服务器已经接上打印机。

    这个应用我还不曾开发过,等这个项目完后,空闲一点,定去试试这需求

    不过呢,这种需求可采用打印服务器或者共享打印机方式解决

  7. Flster
    2009年6月8日13:42 | #7

    achao :

    Flster :那怎样实现服务端打印呢?即是在客户端在WEB上传一个word文档,然后在服务端的打印机自动打印出文档。服务器已经接上打印机。

    这个应用我还不曾开发过,等这个项目完后,空闲一点,定去试试这需求
    不过呢,这种需求可采用打印服务器或者共享打印机方式解决

    如果做成记账打印系统,共享打印机就解决不了啦。如果真能实现服务端打印就说明真的很强大了。

  8. 2009年6月8日15:47 | #8

    这个东东理论上应该可以解决的,也曾看到过类似于这方面的资料

    待这周忙后,定当处理这个问题

  9. 2009年6月26日14:52 | #9

    作者你倒是说你另外的包是什么呀,我装了ncurses了,运行你的程序不成功那,作者速速回答广大爱好ncurses的人吧,

  10. 2009年6月27日17:27 | #10

    ourmeng :
    作者你倒是说你另外的包是什么呀,我装了ncurses了,运行你的程序不成功那,作者速速回答广大爱好ncurses的人吧,

    呵呵,这个倒是个问题哈,安装ncurses包后,可能还要安装一些其它包,你的程序运行不成功?提示些什么呢?如果你的NCURSES正常安装成功的话, 那就应该能够运行的。
    另外,这个打印控制涉及到打印机,你直接在LINUX环境下运行可能看不到效果,可能需要在终端看效果。

  11. 2009年8月11日17:52 | #11

    @achao
    to Flster:
    你谈到的关于实现服务器端打印的问题,其实可以解决的。
    当然,这个需要添加PHP的一个扩展:Printer。这个扩展就支持调用服务器端的打印机进行文档的打印。
    当然,需要打印的内容需要采用PJL (Printer Job Language)处理后才能送到打印去处理。

  12. rocket
    2010年8月2日15:47 | #12

    我看了之后还是不太明白,我现在就在试着控制一台打印机,但是有很多的问题啊,我刚才把你的代码复制了,但是并不能实现打印,怎么回事啊?我买的是一台小票打印机。 不知道能否加你为好友,具体问你解决方法呢?

  13. 2010年8月4日13:17 | #13

    这个没有问题,一起探讨一下就是。

  1. 目前还没有任何 trackbacks 和 pingbacks.