博客
关于我
php端口直驱网络打印机,能自定义格式
阅读量:629 次
发布时间:2019-03-14

本文共 2305 字,大约阅读时间需要 7 分钟。

最近购买了一款支持ESC/POS的网络打印机,初次接触这种打印机发现其功能相当实用。打印机支持端口直驱模式,但单独使用会导致字符逐个打印不美观。经过尝试发现其支持ESC/POS命令控制,这种结合端口直驱和ESC/POS的方式效果更佳。以下是一个简单的打印模块类,私有函数名称均为拼音,功能名称可通过名称推测其用途。

ESC/POS是一种常用的打印机控制协议,支持众多功能命令。例如,想换行只需输入'\x0A',想输出“你好”则直接输入“你好”。以下是对该打印模块类的详细说明:

class Printer80X extends Model{	private $printer_fp;	/**	 * 初始化打印机连接	 * @param resource $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"); // 选择叠放	}	/**	 * 取消叠放	 */	private 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"); // 上一行打印	}	/**	 * 输出内容	 */	public 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"); // 设定设备防锈	}	/**	 * 初始化打印机连接	 * @param string $ip 打印机IP地址	 * @param int $port 端口号	 * @return bool true: 连接成功;false: 连接失败	 */	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; // 连接成功		}	}}

该类实现了一个打印模块,通过不同打印机命令字符控制打印功能。类中的私有函数对应各项打印操作命令,如初始化打印机、取消打印单据、换行、选择叠放、双列打印等。用户可根据需要调用对应的函数进行打印操作。

转载地址:http://dublz.baihongyu.com/

你可能感兴趣的文章
Leetcode第557题---翻转字符串中的单词
查看>>
Problem G. The Stones Game【取石子博弈 & 思维】
查看>>
Java多线程
查看>>
openssl服务器证书操作
查看>>
expect 模拟交互 ftp 上传文件到指定目录下
查看>>
PDF.js —— vue项目中使用pdf.js显示pdf文件(流)
查看>>
我用wxPython搭建GUI量化系统之最小架构的运行
查看>>
我用wxPython搭建GUI量化系统之多只股票走势对比界面
查看>>
selenium+python之切换窗口
查看>>
重载和重写的区别:
查看>>
搭建Vue项目步骤
查看>>
账号转账演示事务
查看>>
idea创建工程时错误提醒的是architectCatalog=internal
查看>>
SpringBoot找不到@EnableRety注解
查看>>
简易计算器案例
查看>>
在Vue中使用样式——使用内联样式
查看>>
Find Familiar Service Features in Lightning Experience
查看>>
Explore Optimization
查看>>
连接Oracle数据库经常报错?关于listener.ora和tnsnames.ora文件的配置
查看>>
解决数据库报ORA-02289:序列不存在错误
查看>>