16年我做過這種類似的,是做網(wǎng)絡(luò)小票打印機(jī),后臺(tái)我也是用php實(shí)現(xiàn);
我們擁有10余年網(wǎng)頁設(shè)計(jì)和網(wǎng)站建設(shè)經(jīng)驗(yàn),從網(wǎng)站策劃到網(wǎng)站制作,我們的網(wǎng)頁設(shè)計(jì)師為您提供的解決方案。為企業(yè)提供做網(wǎng)站、成都網(wǎng)站制作、微信開發(fā)、小程序設(shè)計(jì)、成都做手機(jī)網(wǎng)站、H5響應(yīng)式網(wǎng)站、等業(yè)務(wù)。無論您有什么樣的網(wǎng)站設(shè)計(jì)或者設(shè)計(jì)方案要求,我們都將富于創(chuàng)造性的提供專業(yè)設(shè)計(jì)服務(wù)并滿足您的需求。
問題的關(guān)鍵是該網(wǎng)絡(luò)打印機(jī)是否有如下功能:
該網(wǎng)絡(luò)打印機(jī)有配置服務(wù)器的功能(比如配置服務(wù)器的域名或者ip地址),意味著該網(wǎng)絡(luò)打印機(jī)能通過網(wǎng)絡(luò)去該地址訪問,如果具備此功能,實(shí)現(xiàn)就很簡單了,你只需在該服務(wù)器做個(gè)數(shù)據(jù)接口(用php可以),讓該打印機(jī)去不停的訪問即可(當(dāng)然該網(wǎng)絡(luò)打印機(jī)應(yīng)該具備定時(shí)循環(huán)去訪問地址的功能)
php 并不能使用打印機(jī)打印,只能 弄出數(shù)據(jù) 和 樣式來進(jìn)行打印
所用的打印功能 是 瀏覽器本身自帶的
我使用的是ZJ-5870A小票打印機(jī),要有一個(gè)web打印控件,推薦lodop,使用lodop進(jìn)行打印預(yù)覽,在彈出的預(yù)覽界面選擇那個(gè)小票打印機(jī)打印,主要是打印機(jī)和php無關(guān),關(guān)鍵是使用lodop把php要顯示的內(nèi)容弄成可打印的頁面。然后再連打印機(jī)即可
ESC使用\033表示,LF為\012,CR為\015
例如釋放紙的ESC q使用下面的命令輸出:
fputs($prn,"\033q");
fputs把內(nèi)容發(fā)送給第一句,或者使用其它函數(shù)。
最后說明,上面的033、012、015是八進(jìn)制
php生成的是網(wǎng)頁吧,然后用ie瀏覽,在ie上有個(gè)打印按鈕,可以選擇打印機(jī)
但ie不是你用php寫的,是微軟寫的
你怎么控制一個(gè)微軟寫的軟件,并使用它選擇打印機(jī)?除非他提供了接口
微軟是否提供了接口,應(yīng)該沒有,否則早有人回帖了
但還有一個(gè)可能,當(dāng)你改變本機(jī) 打印機(jī)的首選項(xiàng)時(shí),有可能記錄在注冊(cè)表里面。如果是這樣,那就直接改變注冊(cè)表,就相當(dāng)于選擇了打印機(jī)
但是你想,當(dāng)你瀏覽一個(gè)網(wǎng)頁,它會(huì)修改你的注冊(cè)表,這讓人放不放心,算不算病毒,會(huì)不會(huì)被殺毒軟件屏蔽?或者根本通不過ie默認(rèn)的安全選項(xiàng)
最終結(jié)局就是,b/s方式不要想控制客戶的硬件
但我還是要打印,在當(dāng)前,只有讓客戶安裝打印控件,這樣才可能讓客戶自定義打印機(jī)相關(guān)
還有一種想法,不用客戶端控制來打印,把打印要求提交到服務(wù)器,讓服務(wù)器選擇打印機(jī),沒有用過,你不如研究一下?
另外php最多只能控制服務(wù)器的硬件,想控制客戶機(jī)最多只能用js
對(duì)客戶機(jī)某些打印選項(xiàng)的注冊(cè)表操作,下面有js的例子用法,很久以前的,僅做參考
script
var hkey_root,hkey_path,hkey_key
hkey_root="HKEY_CURRENT_USER"
hkey_path="\\Software\\Microsoft\\Internet Explorer\\PageSetup\\"
//設(shè)置網(wǎng)頁打印的頁眉頁腳為空
function pagesetup_null(){
try{
var RegWsh = new ActiveXObject("WScript.Shell")
hkey_key="header"
RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"")
hkey_key="footer"
RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"")
hkey_key="margin_left"
RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"0.2")
hkey_key="margin_bottom"
RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"0.2")
hkey_key="margin_right"
RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"0.2")
hkey_key="margin_top"
RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"0.2")
}catch(e){}
}
//設(shè)置網(wǎng)頁打印的頁眉頁腳為默認(rèn)值
function pagesetup_default(){
try{
var RegWsh = new ActiveXObject("WScript.Shell")
hkey_key="header"
RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"wb頁碼,p/P")
hkey_key="footer"
RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"ubd")
}catch(e){}
}
/script
打印分頁
p style="page-break-after:always"page1/p
p style="page-break-after:always"page2/p
你的打印是不是編程語言里面說的打印,例如basic語言的print語句,如果是的話,在PHP里面使用echo語句打印內(nèi)容,例如:
echo 'table border=1trtd1td2/table';
如果你是希望程序運(yùn)行后在打印機(jī)上打印輸出內(nèi)容,那可能比較復(fù)雜,而且不是PHP的強(qiáng)項(xiàng),需要編寫許多查找打印機(jī)的代碼,簡單的做法是把數(shù)據(jù)送我特殊設(shè)備,可以使用file_put_contents函數(shù),例如:
file_put_contents('PRN:', 'print test');