本文共 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/