2013-02-13 271 views
2

尋找適當的代碼,從PHP網頁打印到斑馬IP打印機使用RAW端口9100.有誰知道這是可能的嗎?我需要將ZPL格式化輸出中的字符串直接發送到ZM400標籤打印機。我搜索了最高和最低,最近我發現是這樣的:Print directly to network printer using php打印到斑馬打印機在php

它似乎非常接近我所需要的,但是當我的PHP頁面擊中該代碼時,它什麼也不做。下面是我使用的代碼:

<?php 
    $handle = printer_open('\\\\192.168.2.206:9100\\'); 
    printer_set_option($handle, PRINTER_MODE, "RAW"); 
    printer_write($handle, "TEXT To print"); 
    printer_close($handle); 
?> 

回答

1

如果您要將ZPL發送到打印機,則不一定需要專用的打印庫。您只需要打開該打印機的套接字並直接發送ZPL。這是一個普通的PHP套接字通信問題,而不是打印機特定的問題。

如果託管您的網絡應用程序和打印機的服務器位於同一網絡上,那麼您將能夠打開套接字併發送ZPL。但是,如果您的打印機和Web應用程序服務器位於不同的網絡上,則無法使用其他瀏覽器插件或附加組件在打印機上打印套接字。一般來說,通過網站訪問遠程打印機(或任何設備)是一種安全風險。

+0

那麼這將是理想!有沒有一個你會推薦在PHP中使用套接字打印的參考?這就是我所需要的。它的所有內部,在同一個網絡上。我知道我的Zebra ZM400能夠通過插座接受打印。我們目前使用小型Access應用程序來打印報告標籤。我只是沒有看到任何用PHP實現的好例子。看起來像它的可行... – user2070092 2013-02-14 15:37:56

+0

我找到一個鏈接,解釋在PHP編程套接字。你認爲這是朝着正確方向邁出的一步嗎?:http://www.devshed.com/c/a/PHP/Socket-Programming-With-PHP/ – user2070092 2013-02-14 18:25:09

+0

已解決:http://www.binarytides.com/ php-socket-programming-tutorial /從「發送數據」部分複製並粘貼代碼很棒! thnx指針@ jason.zissman – user2070092 2013-02-15 16:48:55

1

printer_open()和相關功能不是標準的PHP語言的一部分;他們是擴展的一部分。

如果你想使用它們,你需要安裝擴展:See here for info on the printer extension

但是,請注意,此擴展只適用於在Windows上運行的PHP。

如果您的服務器不是Windows,則需要使用外部程序將數據發送到打印機。一個例子可能是這樣的:

exec("lpr -P 'printer' -r 'filename.txt'); 

此信息,更可以在SO在其他地方找到 - 例如,在這裏:printing over network from PHP app

希望有所幫助。

+0

疑難雜症,我在Ubuntu的燈工作。我看了一下你發佈的第二個鏈接......在你看來,這對於一個簡單的php網頁來說會更好,你上面發佈的還是LPR打印機類?基本上,我想有一個打印按鈕來打印存儲變量的值,這是一個計算出的Zebra ZPL字符串。 – user2070092 2013-02-14 12:57:09

+0

我還沒有試過LPR課,所以我不能評論它。儘管在Linux平臺上,使用'exec()'調用外部'lpr'程序應該可以普遍地工作。 – Spudley 2013-02-15 07:39:33

6

我意識到這個問題有點老,但我最近不得不執行這個確切的任務,這裏是我如何做到這一點。 主服務器是不在本地網絡上的基於雲的PHP服務器。在本地網絡,我們有另一臺機器這簡直是運行WAMP和這個腳本,Zebra打印機本身也是在IP 192.168.1.201在本地網絡上:

<?php 
/* 
* File Allows printing from web interface, simply connects to the Zebra Printer and then pumps data 
* into it which gets printed out. 
*/ 
$print_data = $_POST['zpl_data']; 

// Open a telnet connection to the printer, then push all the data into it. 
try 
{ 
    $fp=pfsockopen("192.168.1.201",9100); 
    fputs($fp,$print_data); 
    fclose($fp); 

    echo 'Successfully Printed'; 
} 
catch (Exception $e) 
{ 
    echo 'Caught exception: ', $e->getMessage(), "\n"; 
} 

然後,由雲服務器生成的網頁我們有一些代碼只需要在本地網絡上向服務器發送一個Ajax POST,然後發佈在要打印的zpl_data中。

編輯2017年

我們現在已經搬到了事情經過PrintNode(https://www.printnode.com/)運行。我們發現它迄今爲止非常出色,並且允許我們打印各種文檔而無需使用我們自己的代理,並且還提供白色標籤的安裝程序,使其看起來像我們自己的產品。我不隸屬於PrintNode。在安裝上需要的IP打印機後

enter image description here

exec('lp -d printer file'); 

在我的情況下,命令是:

exec('lp -d Epson-Cofetarie /home/clara/Desktop/txt.txt'); 

+1

在Win2016服務器上的端口9100上連接的ZDesigner GK420D上測試的代碼 - 就像魅力一樣。唯一需要調整的是在第一行的某處插入一個UTF8編碼命令到.zpl文件中:[^ CI28](https://de.wikipedia.org/wiki/Zebra_Programming_Language#Schriftbild) – Anse 2017-08-25 08:55:30

+0

使用此代碼對服務器進行Wamp處理2017年在斑馬ZD420上爲我工作。感謝您爲我節省了大量的挫折! – FascistDonut 2017-10-06 14:29:19

0

之後探求的時間我得到的解決方案:打印機 = Epson-Cofetarie

文件 = /home/clara/Desktop/txt.txt

文件需要的APSolute路徑

+0

這不會在服務器機器上運行這些命令嗎?如果打印機插入客戶端機器會怎麼樣? – Sebastianb 2016-06-01 19:27:05

+0

服務器機器。要在客戶機上運行,​​你需要使用ssh2。 http://php.net/manual/ro/function.ssh2-exec.php – Florin 2016-06-02 06:15:41