js、PHP连接外卖小票机打印机方案(调用佳博、芯烨等)

前言:

        目前开发需要用到电脑直接连接外卖小票机打印小票,查阅各种资料,使用 6612345浏览器 终于解决了这个问题。

效果:

        PHP、js直接连接小票机并且自动出票。

支持的小票机:

         目前测试可以的有:电脑A4打印机、佳博GP58MBIII(USB直连)、芯烨xp-58IIL(usb)。原则上可以支持所有USB连接的小票机,目前模板是按58MM设置的。

//打印Pos小票 begin
        function print(arr){
            var ip = $("#ip").val();
            var port = $("#port").val();
            if(ip==""||port==""){alert("ip,port不能为空"); return false;}
            //处理食品数据
            var foodsJson = '';
            for (var i=0;i             {
                foodsJson   = foodsJson + '{"shangpname":'+arr.foods[i].name +',"shuliang":'+ arr.foods[i].count+', "je":'+ arr.foods[i].price+'},';
            }
            var msg = '{'
                +'"method":"' + 'printreport' +'"'  /*报表类型 gridreport fastreport reportmachine 为空 将默认为gridreport  */
                +',"ReportType":"' + 'fastreport' +'"'  /*报表类型 gridreport fastreport reportmachine 为空 将默认为gridreport  */
                +',"ReportName":"' + 'AAAlqs.fr3' +'"' /*报表文件名 POS小票 */
                +',"ReportVersion":"' + '1' +'"' /*可选。报表版本, 为空则默认1  如果本地报表的版本过低 将从 ReportUrl 地址进行下载更新*/
                +',"ReportUrl":"' + '' +'"' /*可选。为空 将不更新本地报表 , 如果本地报表不存在可以从该地址自动下载*/
                //+',"ReportUrl":"' + 'http://localhost/test.fr3' +'"' /*可选。为空 将不更新本地报表 , 如果本地报表不存在可以从该地址自动下载*/
                +',"Copies":"' + '1' +'"' /*可选。打印份数,支持指定打印份数。默认1份,如果为零,不打印,只返回报表生成的pdf,jpg等文件*/
                +',"PrinterName":"' + arr.usb +'"' /*可选。指定打印机,为空的话 使用默认打印机, 请在 控制面板 -> 设备和打印机 中查看您的打印机的名称 */
                +',"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":'+ arr.shopname+arr.num
                +', "subTitle": "订单号:'+arr.ordernumstore
                +'", "deskname": "时间:'+arr.time
                +'", "djh": "地址:'+arr.address
                +'", "czy": "姓名:'+arr.person
                +'", "starttime": "电话:'+arr.tel
                 +'", "tf": "", "ysje":'+ arr.peisong
                +', "yhje":'+arr.amount
                +', "sjje":'+ arr.noteTex
                +', "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": ['  ///*数据行
                +foodsJson
                +']'
                + '}';
            jQuery.support.cors = true;         //写到$.ajax $.get $.post 前面 解决 jQuery.Ajax IE8,9 无效(CORS跨域)
            $.ajax({
                async : false, //循环打印时, async 必须设置为 false,则所有的请求均为同步请求,在没有返回值之前,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。
                url : "http://"+ip+":"+port+"/",
                type : "POST",
                contentType: "application/x-www-form-urlencoded", //要这样设置
                //contentType: "application/json", //错误方式
                dataType : "json", //设置为 json 格式
                //dataType : "text", //设置为 text 格式 也可以,但是返回的结果需要自己解析判断
                //crossDomain: true,  //crossDomain true 或者false 无所谓,不用设置的
                data : msg,
                beforeSend: function (XMLHttpRequest) {
                    // beforeSend 函数里 不允许添加任何 东西
                    //XMLHttpRequest.setRequestHeader("token", 'abcd1234'); //不允许 使用jQuery发送AJAX请求时在header中添加Token
                },
                success: function(data){
                    // console.log(JSON.stringify(data));
                    if(data.status=="ok"){
                        // alert("打印成功:"+data.data);
                        console.log('订单id')
                        console.log(arr.id)
                        var audio= new Audio("/tip.mp3");//这里的路径写上mp3文件在项目中的绝对路径
                        audio.play();//播放
                        isDayin(arr.id);
                    }else{
                        // alert("打印失败:"+data.data);
                    }
                },
                error: function(data){
                    //console.log(status, response);
                    console.log(JSON.stringify(data));
                    // alert("连接打印机失败"+arr.usb);
                }
            });
        }
//打印Pos小票 end
效果图:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/114093.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学乐多光屏 P90:打开儿童学习新视界

随着科技迅猛发展,儿童教育正在迎来一场前所未有的革命。在这个数字化时代的浪潮中,学乐多光屏P90凭借其卓越的特性和深远的教育理念,成为智能儿童学习领域的引领者,为孩子们创造了崭新的学习体验。 创新科技,引领学习…

亚马逊云科技GenAI菁英创造营,致力于大模型时代高校AI人才培养

大语言模型(LLM)产业的蓬勃发展将改变数字产业生态,助力AI工业化进程、变革海量应用交互方式、创造数字产业新的增长空间。 “GenAI Talent Program”由亚马逊云科技特别打造,该计划致力于大模型时代高校AI人才培养,通…

dubbo项目traceId链路传递(MDC方案及重复traceId处理)

1.traceId用途 主要用于项目dubbo接口调用链日志追踪使用,可以获取完整的链路日志,协助排查问题。 2.traceId传递及代码实现 本方案是基于 org.slf4j.MDC 进行实现,会出现线程池中线程复用导致traceId重复问题,后面会说解决方案。…

头歌MYSQL——课后作业1 数据库和数据表的建立、修改和删除

第1关:建立数据库 任务描述 本关任务:建立数据库 为了完成本关任务,你需要掌握: 如何创建数据库,显示已经建立的数据库 相关知识 创建数据库 创建数据库是在系统磁盘上划分一块区域用于数据的存储和管理。 命令格…

应用TortoiseSVN的SubWCRev管理VisualStudio C#项目编译版本号

首先要安装 TortoiseSVN, 并确保TortoiseSVN的bin目录被加入到系统环境变量Path中。 1、拷贝Porperties目录下的文件AssemblyInfo.cs生成副本AssemblyInfo.template, 作为版本管理的模板文件。 2、修改模板文件中的想要管理的版本号信息 // [assembly: AssemblyVersion(&quo…

使用spring自带的发布订阅来实现发布订阅

背景 公司的项目以前代码里面有存在使用spring自带发布订阅的代码,因此稍微学习一下如何使用,并了解一下这种实现方式的优缺点。 优点 实现方便,代码方面基本只需要定义消息体和消费者,适用于小型应用程序。不依赖外部中间件&a…

(数字图像处理MATLAB+Python)第十一章图像描述与分析-第一节、二节:图像描述概述和特征点

文章目录 一:图像描述概述(1)图像描述(2)描述子 二:特征点(1)Moravec角点检测A:原理B:程序 (2)Harris角点检测A:原理B&…

尚硅谷宋红康MySQL笔记 14-18

是记录,不会太详细,受本人知识限制会有错误,会有个人的理解在里面 第14章 视图 了解一下,数据库的常见对象 对象描述表(TABLE)表是存储数据的逻辑单元,以行和列的形式存在,列就是字段,行就是记…

排序之插入排序

文章目录 前言一、直接插入排序1、基本思想2、直接插入排序的代码实现3、直接插入排序总结 二、希尔排序1、希尔排序基本思想2、希尔排序的代码实现3、希尔排序时间复杂度 前言 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大…

【Vue】vue2预览显示quill富文本内容,vue-quill-editor回显页面,v-html回显富文本内容

文章目录 前言一、下载二、使用步骤1.引入样式2.html代码 总结 前言 提示:这里可以添加本文要记录的大概内容: vue后台框架,若依系统里有一个富文本编辑器,效果如下 在package.json里面查看,发现插件名叫quill 插件的…

基于食肉植物算法优化的BP神经网络(预测应用) - 附代码

基于食肉植物算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于食肉植物算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.食肉植物优化BP神经网络2.1 BP神经网络参数设置2.2 食肉植物算法应用 4.测试结果:5…

【Leetcode】130.被围绕的区域

一、题目 1、题目描述 给你一个 m x n 的矩阵 board ,由若干字符 X 和 O ,找到所有被 X 围绕的区域,并将这些区域里所有的 O 用 X 填充。 示例1: 输入:board = [[“X”,“X”,“X”,“X”],[“X”,“O”,“O”,“X”],[“X”,“X”,“O”,“X”],[“X”,“O”,“X”,“…

海外ios应用商店优化排名因素之视频预览与截图

当我们找到感兴趣的应用程序并转到该应用程序的页面时,首先引起注意的是预览视频。视频旨在以更具吸引力的方式展示应用程序的用户体验和UI。视频长度最多为30秒,其中前5秒最为重要,一定要让它尽可能引人注目。 1、关于优化预览视频的提示。…

【C语言】循环语句详解

✨个人主页: Anmia.🎉所属专栏: C Language 🎃操作环境: Visual Studio 2019 版本 目录 1.什么是循环结构? 2.while循环 while流程图 while语句中的break和continue break continue 3.for循环 for流…

进程Start

Linux中的命令解释器和Windows的程序管理器explorer.exe一样地位,都是在用户态下运行的进程 共享变量发生不同进程间的指令交错,就可能会数据出错 进程只作为除CPU之外系统资源的分配单位 CPU的分配单位是线程 每个进程都有自己的独立用户空间 内核空间是OS内核的…

PyCharm切换虚拟环境

PyCharm切换虚拟环境 为了满足不同任务需要不同版本的包,可以在Anaconda或者Miniconda创建多个虚拟环境文件夹,并在PyCharm下切换虚拟环境。 解决方案 1、打开Ananconda Prompt 2、创建自己的虚拟环境 格式:conda create -n 虚拟环境名字…

PSP - 蛋白质结构预测 OpenFold Multimer 模型训练参数与配置

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/132575709 OpenFold Multimer 是用于预测蛋白质多聚体结构的计算方法。基于OpenFold 的单体预测框架,利用深度学习技术,结…

dayjs格式转换成日期

目录 方法一: ​编辑方法二: 这个项目在筛选订单时间的时候是由前端进行筛选的,用的是adt-design-pro进行二开的,其中在用日期组件的时候遇到了一个问题,组件返回的是: 但是我需要的是年-月-日&#xff…

java八股文面试[数据库]——MySql聚簇索引和非聚簇索引区别

聚集索引和非聚集索引 聚集索引和非聚集索引的根本区别是表记录的排列顺序和与索引的排列顺序是否一致。 1、聚集索引 聚集索引表记录的排列顺序和索引的排列顺序一致(以InnoDB聚集索引的主键索引来说,叶子节点中存储的就是行数据,行数据在…

LeetCode 面试题 02.04. 分割链表

文章目录 一、题目二、C# 题解 一、题目 给你一个链表的头节点 head 和一个特定值 x,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你不需要 保留 每个分区中各节点的初始相对位置。 点击此处跳转题目。 示例 1&#…