登陆

php添加 php_printer 扩展之后无任何效果

最近想用php连接打印机来打印内容,我做了一下步骤但是没任何反应,请各位大神帮帮忙找找原因:

  1. 我用的php7.25+Apache 版本,我去下载了一个最新的 php_printer.dll.

  2. 下载之后,解压得到文件放置php7.25版本目录里面:E:\phpStudy\php\php-7.2.5\ext

  3. 去修改php.ini,我在最好加了一句: extension=php_printer.dll。然后保存重启服务器。

  4. 去PHP中 使用:

      $handle = printer_open("ZDesigner 105SL 203DPI");

     直接报错:Fatal error: Uncaught Error: Call to undefined function printer_open() in E:\phpStudy\WWW\test\1.php:3 Stack trace: #0 {main} thrown in E:\phpStudy\WWW\test\1.php on line 3

# PHP
青松哥 青松哥 23 天前 56 次浏览

全部回复(2)我要回复

  • 秋香姐家的小书童

    秋香姐家的小书童2019-03-31 11:39:50

    一、需求

    使用PHP控制连接打印机

    现场实时连续打印动态数据

    二、配置

    php运行环境正确安装(Apache|Nginx + PHP)

    下载与php版本对应的php_printer.dll扩展

    扩展文件添加到ext目录

    编辑php.ini 添加extension=php_printer.dll;

    三、使用

    1.基本的代码结构:

    <?php$handle = printer_open('printer name');
    printer_start_doc($handle, "doc name");
    printer_start_page($handle);
    printer_set_option($handle, PRINTER_MODE, "RAW");//具体的打印部分printer_end_page($handle);
    printer_end_doc($handle);
    printer_close($handle);?>

    以上为基本的代码结构,如果不指定printer_start_doc与printer_start_page,打印机是不会进行打印的。

    2.具体文字与图形的打印方法介绍

    对打印机的初始设定:printer_set_option,可以设定打印模式、doc标题、打印份数、纸张格式等,参考printer_set_option文档。

    创建一个字体:$font = printer_create_font('simsun',字体高度,字体宽度,字体粗细, 是否斜体, 是否加下划线, 是否加删除线, 方向);具体参见。

    在打印文字之前首先要选择字体printer_select_font($handle, $font);

    使用printer_draw_text($handle,'要打印的文字',起始x,起始y);

    四、遇到的坑

    使用一个服务器端的弱类型的脚本语言去跟硬件打交道,本来就是一件略扯得事情,过程中磨难多多啊。

    在windows上开始配置的服务器是Apache,在打印的时候总是无法打印出正常的尺寸,总是连续打三页。后来,在直接在命令行使用php 命令运行脚本,可以正常的打印,最终究其原因,是Apache服务运行的权限为普通用户,改为超级管理员,或者以超级管理员的身份登录即可。

    字体,一些打印机都附带了相应的客户端软件。但是使用php去控制打印机软件这些东西就没卵用了,所以创建字体就是个坑,字体的名称,首先是在windows font 文件夹中找到相应的文字,然后右键属性查看名称,就是需要填在printer_create_font的第一个参数了。但是:

    部分类型的字体中文是无法正常显示。至今无解,可能是打印机内存有限,无法装下全部的字体文件。

    创建字体需要指定宽高,但是宽高的单位不知道是什么鬼,只能自己尝试

    同样指定问题的位置需要x y的位置坐标值,方法是printer_draw_line 画一条对角线,自己根据宽高比计算。

    打印中文乱码,原因:使用表单提交过了的数据为UTF-8编码,而打印机不一定是UTF-8编码的,需要查阅说明书,进行编码格式转换。

    连续打印几十几百windows直接被干死,蓝屏思密达。最终是Apache进程的问题,每一次打印都会创建一个进程,但是,Apache的进程回收貌似总是不及时,最终系统直接死掉,尝试进行最大连接数等的配置更改,并无作用。最终解决办法:更换Nginx服务器,问题解决。


    回复
    0
  • 秋香姐家的小书童

    秋香姐家的小书童2019-03-31 11:39:13

    PHP操作打印机 你直接用JS不是更好吗

    回复
    0
  • 取消 回复 发送