完全免费且无水印的远程打印教程
- 前提条件
基于免费的HttpPrinter和Sakura实现,其原先实现远程打印需要中间服务器过渡,本文则是不需要中间服务器,只需要打印机连接一台电脑(收银用的电脑也可以),且该电脑可以上网,还需要一个能解析的域名;
- 下载软件
官网链接:
http://www.httpprinter.com/
https://www.natfrp.com/
我整合的软件(httpprinter+Sakura)
网盘链接:https://pan.baidu.com/s/1CzqO-P4CaQAJVfcn0WEJhQ
提取码:9999
建议直接下载我整合的软件 - 内网穿透
1、访问https://www.natfrp.com/注册账号并登录,如下图:
2、点击左侧的创建隧道,进入如下图的设置:
服务器选择带“可建站”字样的;隧道类型选http;本地端口默认12345;绑定域名写你自己的,比如你拥有域名abc.com,则可以用print.abc.com;其他可以不填,然后点确认创建;
3、点击网页左侧的隧道列表,如下图,找到刚新建的这一条隧道,复制服务器后的域名地址,例如我这里是cn-zj-bgp-2.sakurafrp.com
4、然后进入到自己的域名解析页面,新增解析记录,类型(type)为CNAME,主机记录(host)为你的域名前缀如print,记录值为刚刚复制的服务器域名,即cn-zj-bgp-2.sakurafrp.com;添加完成后过一阵子即可生效;
5、点击刚刚网页左侧的管理面板,在右侧点击“点击显示”,并复制显示的秘钥;如图:
-
客户端
1、在需要远程打印的打印机所连接的电脑上打开我整合的软件包,找到/HttpPrinter/HttpPrinter.exe;
双击运行即可,如下图:
点击系统设置可以勾选开机自启(默认已勾选);中间可以改端口,如果有必要的话(改端口的话之前隧道映射的端口也要随之改变);设置为预览会出现打印预览而不是直接打印,可用来调试,调试无误再设置成打印即可;如需退出,右下角的图标右键-退出系统;
2、在我整合的软件包里找到/HttpPrinter/SakuraLauncher.exe;
双击运行,如下图:输入刚刚拷贝的秘钥,点击登录;最好设置成开机自启;
3、登录完成后点击左侧的隧道,如下图,点击刚刚新建的隧道的开关即可;
4、此时访问你的域名如print.abc.com,如果配置无误的话,会显示
HttpPrinterç½‘é¡µæ‰“å°æ’ä»¶(未注册版)或者是HttpPrinter加上一堆乱码,说明已经配置成功了; -
服务器调用
1、我整合的软件包里有调用示例,在/调用示例/Http协议示例/html文件夹下有示例网页,其中用js脚本演示了使用post来调用打印机;
2、需要发起打印只需要对你的域名如print.abc.com发送post请求,即可发起打印,示例代码(nodejs)如下:传参并打印一张小票
var request = require('request');
var msg = '{' +
'"method":"' + 'printreport' + '"' +
',"ReportType":"' + 'fastreport' + '"' /*报表类型 gridreport fastreport reportmachine 为空 将默认为gridreport */ +
',"ReportName":"' + 'AAAPosTicket.fr3' + '"' /*报表文件名 POS小票 */
+
',"ReportVersion":"' + '1' + '"' /*可选。报表版本, 为空则默认1 如果本地报表的版本过低 将从 ReportUrl 地址进行下载更新*/ +
',"ReportUrl":"' + '' + '"' /*可选。为空 将不更新本地报表 , 如果本地报表不存在可以从该地址自动下载*/
//+',"ReportUrl":"' + 'http://localhost/test.fr3' +'"' /*可选。为空 将不更新本地报表 , 如果本地报表不存在可以从该地址自动下载*/
+
',"Copies":"' + '1' + '"' /*可选。打印份数,支持指定打印份数。默认1份,如果为零,不打印,只返回报表生成的pdf,jpg等文件*/
+
',"PrintOffsetX":"' + '0' + '"' /*可选。打印右偏移,单位厘米。报表的水平方向上的偏移量,向右为正,向左为负。*/ +
',"PrintOffsetY":"' + '0' + '"' /*可选。打印下偏移,单位厘米。 报表的垂直方向上的偏移量,向下为正,向上为负。*/ +
',"Preview":"' + '0' + '"' /*可选。是否预览,和主界面设置的效果一样 为空默认不预览, 0:不预览,1:预览(弹出导出的pdf,jpg等文件)。*/ +
',"token":"' + 'aa' + '"' /*可选。只要token值在列表中 方可打印*/ +
',"taskId":"' + '1234567' + '"' /*可选。多个打印任务同时打印时,根据该id确定返回的是哪个打印任务。 */ +
',"exportfilename":"' + '' + '"' /*可选。自定义 导出 文件名称 为空 或者 自定义名称 如 test */ +
',"exportfiletype":"' + '' + '"' /*可选。自定义 导出 文件格式 为空 或者 自定义名称 如 pdf */
+
',"AField": [' ///*字段, type ftBlob (base64格式) ,ftString ftInteger ftBoolean, ftFloat, ftCurrency,ftDateTime, size (ftString 设置为实际长度,其他的设置为0,例如 ftInteger ftBlob 等设置为0 )
+
'{"type": "ftString", "name": "title","size": 255,"required": true},' +
'{"type": "ftString", "name": "subTitle","size": 255,"required": false},' +
'{"type": "ftString", "name": "deskname","size": 255,"required": false},' +
'{"type": "ftString", "name": "djh","size": 255,"required": false},' +
'{"type": "ftString", "name": "czy","size": 255,"required": false},' +
'{"type": "ftString", "name": "starttime","size": 255,"required": false},' +
'{"type": "ftString", "name": "tf","size": 255,"required": false},' +
'{"type": "ftString", "name": "ysje","size": 255,"required": false},' +
'{"type": "ftString", "name": "yhje","size": 255,"required": false},' +
'{"type": "ftString", "name": "sjje","size": 255,"required": false},' +
'{"type": "ftString", "name": "kahao","size": 255,"required": false},'
+
']'
+
',"AData": [' ///*数据行
+
'{"title": "港味花胶鸡小票", "subTitle": "南京市浦口区沿江街道天润城第十二街区西门", "deskname": "桌号:1", "djh": "单据号:20191101000001", "czy": "操作员:服务员一号", "starttime": "消费日期:2020-9-29", "tf": "", "ysje": "100.00", "yhje": "0.00", "sjje": "100.00", "kahao": "890001"},'
+
']'
+
',"BField": [' ///*字段, type ftBlob (base64格式) ,ftString ftInteger ftBoolean, ftFloat, ftCurrency,ftDateTime, size (ftString 设置为实际长度,其他的设置为0,例如 ftInteger ftBlob 等设置为0 )
+
'{"type": "ftString", "name": "shangpname","size": 255,"required": true},' +
'{"type": "ftString", "name": "shuliang","size": 255,"required": false},' +
'{"type": "ftString", "name": "je","size": 255,"required": false},'
+
']'
+
',"BData": [' ///*数据行
+
'{"shangpname": "青椒肉丝", "shuliang": "1", "je": "14.50"},' +
'{"shangpname": "清汤丸子", "shuliang": "1", "je": "20.90"},' +
'{"shangpname": "土豆丝", "shuliang": "1", "je": "7.00"},' +
'{"shangpname": "凉拌牛肉", "shuliang": "1", "je": "50.00"},' +
'{"shangpname": "红烧茄子", "shuliang": "1", "je": "30.00"},' +
'{"shangpname": "四喜丸子", "shuliang": "1", "je": "23.00"},' +
']'
+
'}';
request.post({ url: 'http://print.abc.com/', form: msg }, function(error, response, body) {//要将url中的域名换成你自己的
if (!error && response.statusCode == 200) {
console.log(body)
} else {
console.log(error)
}
})
使用了request模块,所以在这之前需要在命令行里执行npm install request;
要将url中的域名换成你自己的域名;
这个示例代码是打印小票模板,只需要传参即可,该模板在客户端的报表工具里可以新增或者修改,如图:在fastreport中的POS小票即是该代码所打印的模板;