printer_set_option
,可以设定打印模式、doc标题、打印份数、纸张格式等参考。
使用一个服務器端的弱类型的脚本语言去跟硬件打交道本来就是一件略扯得事情,过程中磨难多多啊
对于宽度高度单位与标签纸的尺寸的关系和单位换算现在没弄清楚。
对于为什么只有部分的Windows字体可以使用的原因现在没弄清楚。
通过当前使用的打印机服务器Godex ez1105指令文档打印机服务器中的单位为dot
,1mm=8dot所以对于单位需查阅相应打印机服务器型号的打印机服务器文档。
最开始打印条码的方案是使用php生成条码图片然后使用printer_draw_bmp
來打印图片,但是这样效率比较低通过查阅决定使用printer_write
方法直接打印指令
1.在原有代码结构的基础上使用printer_write
会打印两份出来,一份是基本的打印名字另一个是指令打印的,所以使用指令打印就不到将代码放到printer_start_doc printer_start_page中,会被视为两个不同的文档
//使用这种EZPL指令字符串
//這种格式生成的指令无法执行,需要把指令直接放到双引号之间
3.打印机服务器总是延迟打印一个(第一次执行代码打印机服务器没有执荇,好像缓存了)
最终发现问题的所在是最后一个指令后面没有换行直接跟双引号
对新发现的内容补充一下。
由于打印机服务器的分辨率问题普通的打印机服务器(如我这使用的EZ1105)直接使用打印机服务器指令打印中文字体,会出现锯齿但是指令打印方式与printer_draw_text
又不可以同时使用。所以既要清晰的文字还要条码信息只能更换条码打印方式。
之前顾虑的图片打印条码方式可能产生的效率问题其实是多虑了,经过實践每次生成的图片就几KB,完全不影响速度
所以使用了来生成条码的png图片,然后再将png的图片转为1位的bmp图片(因为php_printer 只提供了打印bmp格式的圖片的方法)具体可参考示例代码IMGGenerator.php
。
注:因为
printer_draw_text
方法使用的字体是通过printer_create_font
方法所以每次就是生成要打印的文字的矢量数据,然后再传递给咑印机服务器所以才清晰。
因为我们熟悉的是officeΦ选择的一号、二号等字体打印出来的大小但是打印机服务器并不是一一对应,虽然知道了1mm=8dot这个公式还是必须经过多次的尝试才能得絀结论,经查文档有一个字号转换公式:
当TTF字型的宽度与高度设为相同时印出的字型即可与Windows字型相同,TTF字型的运算公式为: TTF字型高度 = Windows字型号数 * dpi /72. dpi即打印机服务器的分辨率(此部分内容打印机服务器不同可能公式不同,请查阅相关型号打印机服务器文档)
部分相关实例代碼已更新到github!
确认一键查看最优答案
本功能為VIP专享,开通VIP获取答案速率将提升10倍哦!
希望大家给个列子 或者提示一下
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。