首頁  >  問答  >  主體

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

#
青松哥青松哥2054 天前1793

全部回覆(3)我來回復

  • 秋香姐家的小书童

    秋香姐家的小书童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
  • 取消回覆