不久前遇到了需要使用打印机的功能,买了一款网络打印机,号称支持端口直驱,不过这种直接将字符输出到端口之后,只能是将字符一个接一个打印出来,并不美观;后发现其支持ESC/POS打印,便尝试结合了一下端口直驱和和ESC/POS控制,效果还不错,下面是简单的一个class,实现了一个打印模块,私有函数的名称都是拼音,大概可以猜出功能。
至于更详细的实现,可以查看ESC/POS标准;
其实指令只是特殊字符,想换行,就输入'\x0A',想输出“你好”,就是直接输入你好;
class Printer80X extends Model
{
private $printer_fp;
private function initprinter($fp)
{
fwrite($fp,"\x1B\x40");
}
private function zuobianju($fp)
{
fwrite($fp,"\x1D\x4C\x05\x00");
}
private function jueduidayin($fp)
{
fwrite($fp,"\x1B\x24\x01\x00");
}
private function changeLine($fp)
{
fwrite($fp,"\x0A");
}
private function jiacu($fp)
{
fwrite($fp,"\x1B\x45\x01");
}
function bujiacu($fp)
{
fwrite($fp,"\x1B\x45\x00");
}
private function zuoduiqi($fp)
{
fwrite($fp,"\x1B\x61\x00");
}
private function juzhong($fp)
{
fwrite($fp,"\x1B\x61\x01");
}
private function youduiqi($fp)
{
fwrite($fp,"\x1B\x61\x02");
}
private function fangda2bei($fp)
{
fwrite($fp,"\x1D\x21\x11");
}
private function fangda3bei($fp)
{
fwrite($fp,"\x1D\x21\x22");
}
private function bufangda($fp)
{
fwrite($fp,"\x1D\x21\x00");
}
private function zou1hang($fp)
{
fwrite($fp,"\x1B\x64\x01");
}
private function shuchu($fp,$content)
{
$out = mb_convert_encoding($content,"gb2312","utf-8") ;
fwrite($fp, $out);
}
private function qiezhi($fp)
{
fwrite($fp,"\x1D\x56\x42\x02");
}
private function fengming($fp)
{
fwrite($fp,"\x1B\x42\x03\x09");
}
public function init($ip,$port)
{
$this->printer_fp = fsockopen($ip,$port,$errno,$errstr,300);//初始化
if (!$this->printer_fp)
{
echo "open fail!";
return false;
}
else
return true;
}
}