最新要闻
- 宕昌县南阳镇综合养老服务中心改建项目中标公示|天天观热点
- 日本白兔航天器月球着陆撞个稀碎 原因公布:一个错误引发惨案
- 资讯推荐:消除汉字“数字鸿沟”!蚂蚁“汉字拾光计划”解决生僻字输入难题
- 环球观速讯丨退出手机市场已有两年!LG SmartWorld服务即将停止运营
- 男生炫酷“海胆头”参加毕业典礼:嗨翻全场
- 不必过分担忧大米产需缺口 |当前速讯
- 首次10nm以下!三星研发全新4F2内存芯片:面积缩减30% 每日讯息
- 3199元 铭凡UM790 Pro迷你主机上架:锐龙9 7940HS_每日速讯
- OneUI 5.1确认存在锁屏Bug!三星:已进行修复
- 成都刮起剩菜盲盒风!便宜的临期食品供不应求 焦点播报
- 葫芦娃救爷爷 理想ONE陷车:拖车、飞度、一串越野车来救均动弹不得|环球快播报
- 如何改变孩子的坏脾气教育笔记-儿童教育
- 海通证券联合深交所走进广西开展金融帮扶专项活动-天天头条
- 天天快讯:缩减5G基站招标规模 大幅减少5G投资?中移动回应:外界误读
- 天天关注:又一个满血14GB/s!PCIe 5.0 SSD用上巨型风扇 太过分了
- 抗原检测盒优惠了!50人份到手19.9元
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
每日消息!记录--前端小票打印、网页打印
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助
一、小票打印
目前市面上的小票打印机大多采用的打印指令集为ESC/POS指令,它可以使用ASCII码、十进制、十六进制来控制打印,我们可以使用它来控制字体大小、打印排版、字体加粗、下划线、走纸、切纸、控制钱箱等,下面以初始化打印机为例:
ASCII码 ESC @十进制码 27 64十六进制 1B 40
小票打印纸的宽度一般可分58mm和80mm,这里指的是打印纸的宽度,但是在实际打印的时候,有效打印区域并没有这么宽。
打印机纸宽58mm,页的宽度384,字符宽度为1,每行最多盛放32个字符 打印机纸宽80mm,页的宽度576,字符宽度为1,每行最多盛放48个字符
上面说的字符指的是打印到小票上的内容,其中数字和字母占1个字符,中文占2个字符,也就是说,如果使用58mm的打印纸,一行最多可以打印16个汉字或者32个数字。
【资料图】
当然这是在不改变字体大小的情况下,如果我们改变了字体大小,那么一行盛放的内容也会改变。
//控制字符大小ASCII码 GS ! n十进制码 29 33 n十六进制 1D 21 n
1.这里的n是一个变量, 0 ≤ n≤ 255
2.用二进制表示,n的取值范围就是00000000到11111111,其中二进制的前四位用来控制宽度,后四位用来控制高度。0000表示不变,0001表示放大2倍,0002表示放大3倍,以此类推
3.该命令对所有字符(英数字符和汉字) 有效。
4.缺省值:n = 0
下面我们来看一下字符的不同放大倍数(这里的1倍,表示使用默认大小):
放大倍数 | n(二进制) | n(十进制) |
---|---|---|
宽度1倍,高度1倍 | 00000000 | 0 |
宽度1倍,高度2倍 | 00000001 | 1 |
宽度1倍,高度3倍 | 00000002 | 2 |
宽度2倍,高度1倍 | 00010000 | 16 |
宽度2倍,高度2倍 | 00010001 | 17 |
宽度2倍,高度3倍 | 00010002 | 18 |
宽度3倍,高度1倍 | 00020000 | 32 |
宽度3倍,高度2倍 | 00020001 | 33 |
宽度3倍,高度3倍 | 00020002 | 34 |
PS:打印纸时间有些长,字迹有些模糊,见谅
打印指令封装
// 打印机纸宽58mm,页的宽度384,字符宽度为1,每行最多盛放32个字符// 打印机纸宽80mm,页的宽度576,字符宽度为1,每行最多盛放48个字符const PAGE_WIDTH = 576;const MAX_CHAR_COUNT_EACH_LINE = 48;//字符串转字节序列function stringToByte(str) { var bytes = new Array(); var len, c; len = str.length; for (var i = 0; i < len; i++) { c = str.charCodeAt(i); if (c >= 0x010000 && c <= 0x10FFFF) { bytes.push(((c >> 18) & 0x07) | 0xF0); bytes.push(((c >> 12) & 0x3F) | 0x80); bytes.push(((c >> 6) & 0x3F) | 0x80); bytes.push((c & 0x3F) | 0x80); } else if (c >= 0x000800 && c <= 0x00FFFF) { bytes.push(((c >> 12) & 0x0F) | 0xE0); bytes.push(((c >> 6) & 0x3F) | 0x80); bytes.push((c & 0x3F) | 0x80); } else if (c >= 0x000080 && c <= 0x0007FF) { bytes.push(((c >> 6) & 0x1F) | 0xC0); bytes.push((c & 0x3F) | 0x80); } else { bytes.push(c & 0xFF); } } return bytes;}//字节序列转ASCII码//[0x24, 0x26, 0x28, 0x2A] ==> "$&C*"function byteToString(arr) { if (typeof arr === "string") { return arr; } var str = "", _arr = arr; for (var i = 0; i < _arr.length; i++) { var one = _arr[i].toString(2), v = one.match(/^1+?(?=0)/); if (v && one.length == 8) { var bytesLength = v[0].length; var store = _arr[i].toString(2).slice(7 - bytesLength); for (var st = 1; st < bytesLength; st++) { store += _arr[st + i].toString(2).slice(2); } str += String.fromCharCode(parseInt(store, 2)); i += bytesLength - 1; } else { str += String.fromCharCode(_arr[i]); } } return str;}//居中function Center() { var Center = []; Center.push(27); Center.push(97); Center.push(1); var strCenter = byteToString(Center); return strCenter;}//居左function Left() { var Left = []; Left.push(27); Left.push(97); Left.push(0); var strLeft = byteToString(Left); return strLeft;}//居右function Right() { var right = []; Left.push(27); Left.push(97); Left.push(2); var strRight = byteToString(right); return strRight;}//标准字体function Size1() { var Size1 = []; Size1.push(29); Size1.push(33); Size1.push(0); var strSize1 = byteToString(Size1); return strSize1;}//大号字体/* 放大1倍 n = 0 * 长宽各放大2倍 n = 17 */function Size2(n) { var Size2 = []; Size2.push(29); Size2.push(33); Size2.push(n); var strSize2 = byteToString(Size2); return strSize2;}// 字体加粗function boldFontOn() { var arr = [] arr.push(27) arr.push(69) arr.push(1) var cmd = byteToString(arr); return cmd}// 取消字体加粗function boldFontOff() { var arr = [] arr.push(27) arr.push(69) arr.push(0) var cmd = byteToString(arr); return cmd}// 打印并走纸n行function feedLines(n = 1) { var feeds = [] feeds.push(27) feeds.push(100) feeds.push(n) var printFeedsLines = byteToString(feeds); return printFeedsLines}// 切纸function cutPaper() { var cut = [] cut.push(29) cut.push(86) cut.push(49) var cutType = byteToString(cut); return cutType}// 开钱箱function open_money_box() { var open = [] open.push(27) open.push(112) open.push(0) open.push(60) open.push(255) var openType = byteToString(open) return openType}// 初始化打印机function init() { var arr = [] arr.push(27) arr.push(68) arr.push(0) var str = byteToString(arr) return str}/* 设置左边距 len: */function setLeftMargin(len = 1) { var arr = [] arr.push(29) arr.push(76) arr.push(len) var str = byteToString(arr) return str}// 设置打印区域宽度function setPrintAreaWidth(width) { var arr = [] arr.push(29) arr.push(87) arr.push(width) var str = byteToString(arr) return str}/** * @param str * @returns {boolean} str是否全是中文 */function isChinese(str) { return /^[\u4e00-\u9fa5]$/.test(str);}// str是否全含中文或者中文标点function isHaveChina(str) { if (escape(str).indexOf("%u") < 0) { return 0 } else { return 1 }}/** * 返回字符串宽度(1个中文=2个英文字符) * @param str * @returns {number} */function getStringWidth(str) { let width = 0; for (let i = 0, len = str.length; i < len; i++) { width += isHaveChina(str.charAt(i)) ? 2 : 1; } return width;}/** * 同一行输出str1, str2,str1居左, str2居右 * @param {string} str1 内容1 * @param {string} str2 内容2 * @param {string} fillWith str1 str2之间的填充字符 * @param {number} fontWidth 字符宽度 1/2 * */function inline(str1, str2, fillWith = " ", fontWidth = 1) { const lineWidth = MAX_CHAR_COUNT_EACH_LINE / fontWidth; // 需要填充的字符数量 let fillCount = lineWidth - (getStringWidth(str1) + getStringWidth(str2)) % lineWidth; let fillStr = new Array(fillCount).fill(fillWith.charAt(0)).join(""); return str1 + fillStr + str2;}/** * 用字符填充一整行 * @param {string} fillWith 填充字符 * @param {number} fontWidth 字符宽度 1/2 */function fillLine(fillWith = "-", fontWidth = 1) { const lineWidth = MAX_CHAR_COUNT_EACH_LINE / fontWidth; return new Array(lineWidth).fill(fillWith.charAt(0)).join("");}/** * 文字内容居中,左右用字符填充 * @param {string} str 文字内容 * @param {number} fontWidth 字符宽度 1/2 * @param {string} fillWith str1 str2之间的填充字符 */function fillAround(str, fillWith = "-", fontWidth = 1) { const lineWidth = MAX_CHAR_COUNT_EACH_LINE / fontWidth; let strWidth = getStringWidth(str); // 内容已经超过一行了,没必要填充 if (strWidth >= lineWidth) { return str; } // 需要填充的字符数量 let fillCount = lineWidth - strWidth; // 左侧填充的字符数量 let leftCount = Math.round(fillCount / 2); // 两侧的填充字符,需要考虑左边需要填充,右边不需要填充的情况 let fillStr = new Array(leftCount).fill(fillWith.charAt(0)).join(""); return fillStr + str + fillStr.substr(0, fillCount - leftCount);}
也就是说,如果我们使用的打印机采用的是ESC/POS指令集(我这里使用过佳博、芯烨、斯普瑞特打印机),只要我们想办法把打印指令发送给打印机,打印机就可以识别到并且进行打印等操作。那么我们该如何发送呢?
1.蓝牙打印机
参考掘金 zgt_不梦的文章微信小程序连接蓝牙打印机打印图片示例
- 初始化蓝牙模块 wx.openBluetoothAdapter()
- 初始化完成后搜寻附近的蓝牙设备 wx.startBluetoothDevicesDiscovery()
- 监听寻找到新设备的事件 wx.onBluetoothDeviceFound()
- 在监听寻找到新设备的事件回调中获取所有蓝牙设备列表 wx.getBluetoothDevices()
- 连接低功耗蓝牙设备 wx.createBLEConnection()
- 连接成功后获取蓝牙设备服务 wx.getBLEDeviceServices()
- 在服务中取(notify=true || indicate=true) && write=true 的特征值的 uuid: wx.getBLEDeviceCharacteristics()
- 完成后停止搜寻 wx.stopBluetoothDevicesDiscovery()
- 向低功耗蓝牙设备特征值中写入二进制数据 wx.writeBLECharacteristicValue()
- 离开页面时取消蓝牙连接 wx.closeBLEConnection()
- 关闭蓝牙模块 wx.closeBluetoothAdapter()
亲测,好使!在uniapp也可以,只需替换对应的API即可
2.网口打印机
这里我使用的scoket连接,相比于USB打印,这里需要保证打印机和安卓设备在同一局域网下。好处是安卓设备可以和打印机距离较远(比如厨房打印)。这里以斯普瑞特打印机为例:[斯普瑞特官网 www.sprinter.com.cn/在进行数据通信之前,我们需要知道打印机在此局域网下的IP,下图为“一键配网”工具
通过这个工具我们可以方便快捷的查询到打印机的IP,或者可以根据空闲的网段来修改默认分配的IP,斯普瑞特POS打印机的端口是9100。
如果是其他品牌的打印机,我们也可以使用arp命令来查看当前局域网下的IP
拿到打印机的IP之后我们怎么来测试一下打印机呢?
我们可以使用telnet命令(这个在Windows系统一般默认是关闭的,需要我们手动打开)
//telnet + 空格 + ip + 空格 + 端口号telnet 192.168.5.6 9100
打开命令行窗口输入telnet命令,按下回车
如果端口关闭或者无法连接,则显示不能打开到主机的链接,链接失败;端口打开的情况下,链接成功,则进入telnet页面(全黑的),证明端口可用。
连接成功后,我们输入任何内容后,按下回车,打印机就会打印我们刚才输入的内容。
接下来我们要使用scoket来连接安卓设备和打印机,这里我使用的是uniapp
/** * 调用tcp通信进行打印 * @param {buffer} buffer 打印数据 * @param {object} printerInfo 打印机对象{IP:"",PORT:""} */function tcpWrite(buffer, printerInfo) { var Socket = plus.android.importClass("java.net.Socket"); var PrintWriter = plus.android.importClass("java.io.PrintWriter"); var BufferedWriter = plus.android.importClass("java.io.BufferedWriter"); var OutputStreamWriter = plus.android.importClass("java.io.OutputStreamWriter"); var BufferedReader = plus.android.importClass("java.io.BufferedReader"); var InputStreamReader = plus.android.importClass("java.io.InputStreamReader"); var InetSocketAddress = plus.android.importClass("java.net.InetSocketAddress"); //连接 注意:这里的端口一定是数字类型 var sk = null try { sk = new Socket(printerInfo.IP, Number(printerInfo.PORT)); sk.setSoTimeout(5000); } catch (e) { console.log(e, "ee") uni.showToast({ icon: "none", title: "打印机连接失败" }) } //发送 try { var outputStreamWriter = new OutputStreamWriter(sk.getOutputStream(), "GBK"); var bufferWriter = new BufferedWriter(outputStreamWriter); var out = new PrintWriter(bufferWriter, true); out.println(buffer); //关闭tcp连接 out.close(); } catch (e) { console.log(e, "ee") uni.showToast({ icon: "none", title: "打印机数据传输失败" }) }}
打印小票
目前我们已经可以开心的使用打印功能了,只需要组合一下打印指令即可。这里需要注意的是,如果我们在此之前设置了字符大小宽高均放大2倍,那么后面打印的字符都会被放大,所以如果后面我们想使用默认字符大小,我们还需要再次设置字符大小为默认来覆盖之前的指令
//这里的EscPosUtil.js就是上面封装的打印指令import Esc from "./EscPosUtil.js";// 打印文字格式let strCenter = Esc.Center(); //文字居中let strLeft = Esc.Left(); //文字靠左let strSize1 = Esc.Size1(); //默认文字let strSize2 = Esc.Size2(17); //文字放大两倍(长宽均为两倍)let printerInfo = { IP:"192.168.5.6", PORT: 9100}let strCmd = strCenter + Esc.Size2(17) + Esc.boldFontOn() + "测试门店"+ "\n"; strCmd += strSize1 + Esc.fillLine(" ") + "\n" strCmd += strCenter + Esc.Size2(17) + Esc.boldFontOn() + "结账单-堂食" + "\n"; strCmd += strSize1 + Esc.fillLine(" ") + "\n" strCmd += strLeft + Esc.Size2(17) + "取餐号:" + "62" + "\n"; strCmd += Esc.inline("桌号:" + "牡丹厅", "人数:" + "6", " ", 2) + "\n" strCmd += Esc.boldFontOff() + strSize1 + Esc.fillLine(" ") + "\n" strCmd += strLeft + strSize1 + "订单号:" + "202305171749110001" + "\n"; // 商品信息 strCmd += Esc.fillAround("商品") + "\n" // 票尾 strCmd += Esc.fillLine(" ") + "\n" strCmd += strCenter + "欢迎下次光临!" + "\n"; strCmd += Esc.feedLines(4) + "\n" // 切纸 strCmd += Esc.cutPaper()tcpWrite(strCmd, printerInfo)
打印效果(这里仅为展示,非上述代码打印)
3.USB打印机
这里我使用的是uniapp插件市场的插件,如果你了解安卓原生开发,你也可以自己制作一个原生插件,或者使用Native.js开发。使用原生插件在本地调试需要先打包“自定义调试基座”,在本地测试后再打正式包。
uni-app基于nativejs实现USB-OTG通讯 - 简书1,监听USB拔出连接,判断是否含有权限 2,获取权限后,打开设备实现连接 3,读写发送接受数据https://www.jianshu.com/p/7c308ffcd789
uni-app官网uni-app,uniCloud,serverlesshttps://uniapp.dcloud.net.cn/plugin/native-plugin.html#%E6%9C%AC%E5%9C%B0%E6%8F%92%E4%BB%B6-%E9%9D%9E%E5%86%85%E7%BD%AE%E5%8E%9F%E7%94%9F%E6%8F%92%E4%BB%B6
Android USB接口热敏小票打印机插件usbPrinter - DCloud 插件市场本插件提供安卓手机通过USB接口连接热敏小票打印机进行打印的相关功能。通过USB连接相比使用蓝牙连接更稳定。https://ext.dcloud.net.cn/plugin?id=7757
在使用USB插件后,我们可以监听USB设备的插入和拔出,在初始化之后,我们可以进行数据通信,将上面封装的打印指令传给打印机即可
二、网页打印
由于是网页运行在浏览器中,所以我们只能使用浏览器给我们提供的API
1.windows.print()
这个API在不同的浏览器中会有差异,其作用就是可以把网页中的body元素打印出来,如果我们不想打印整个body元素,则需要将body的innerHTML替换。使用这种方式有时有些页面样式会和打印出来的不一样,那么我们就要使用其他方式来优化。
//使用方法document.body.innerHTML = newstr; // 把需要打印的指定内容赋给bodywindow.print();
1.1使用媒体查询
@media print { //把需要打印时才用到的样式写到这里 p{ font-size:16px; }}同理,你也可以直接在CSS文件或者style标签中加上media="print"
1.2监听打印事件
//监听打印之前的事件window.onbeforeprint = function() { //可以修改元素样式}//监听打印之后的事件window.onafterprint = function() { //恢复之前的样式}
1.3分页符
1.3.1 page-break-before 指定元素前插入分页符
1.3.2 page-break-after 指定元素后插入分页符
值 | 描述 |
---|---|
auto | 默认。如果必要则在元素后插入分页符。 |
always | 在元素后插入分页符。 |
avoid | 避免在元素后插入分页符。 |
left | 在元素之后足够的分页符,一直到一张空白的左页为止。 |
right | 在元素之后足够的分页符,一直到一张空白的右页为止。 |
inherit | 规定应该从父元素继承 page-break-after 属性的设置。 |
1.您不能对绝对定位的元素使用此属性。
2.请尽可能少地使用分页属性,并且避免在表格、浮动元素、带有边框的块元素中使用分页属性。
3.任何版本的Internet Explorer(包括IE8)支持属性值"left","right",和"inherit"。
4.Firefox,Chrome和Safari不支持属性值"avoid","left"和"right"。.
@media print { footer {page-break-after: always;}}
1.3.3 page-break-inside设置是否在指定元素中插入分页符
值 | 描述 |
---|---|
auto | 默认。如果必要则在元素内部插入分页符。 |
avoid | 避免在元素内部插入分页符。 |
inherit | 规定应该从父元素继承 page-break-inside 属性的设置。 |
- 您不能对绝对定位的元素使用此属性。
- 请尽可能少地使用分页属性,并且避免在表格、浮动元素、带有边框的块元素中使用分页属性。
- IE8 及更早IE版本不支持 "inherit" 属性。
- Firefox, Chrome, 以及 Safari 不支持属性值 "avoid".
//避免在与元素中插入分页符:@media print { pre, blockquote {page-break-inside: avoid;}}1.4设置纸张
@page:用来设置页面大小、边距、方向等
//portrait:纵向; landscape: 横向@page { size: A4 portrait; //设置纸张及其方向 这里表示使用A4纸张,打印方向为纵向 margin: 3.7cm 2.6cm 3.5cm; //设置纸张外边距} // 去除页眉@page { margin-top: 0; } // 去除页脚@page { margin-bottom: 0; }值得注意的是,如果我们使用的打印机是黑白打印的,比如针式打印机,那么我们使用的颜色最好是#000,如果使用#999这种灰色,打印效果会很不清晰
本文转载于:
https://juejin.cn/post/7237316724739457061
如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。
关键词:
-
[ESP] ESP-IDF WiFi配网(SoftAP+HTTPD)代码备注_环球看点
ESP-IDFWiFi配网(SoftAP+HTTPD)代码备注主要是为了方便了解实际代码层面的配网协议是什么样的,所以文档记
来源: 每日消息!记录--前端小票打印、网页打印
[ESP] ESP-IDF WiFi配网(SoftAP+HTTPD)代码备注_环球看点
用好Prompt 可以让AI更智能
宕昌县南阳镇综合养老服务中心改建项目中标公示|天天观热点
日本白兔航天器月球着陆撞个稀碎 原因公布:一个错误引发惨案
资讯推荐:消除汉字“数字鸿沟”!蚂蚁“汉字拾光计划”解决生僻字输入难题
环球观速讯丨退出手机市场已有两年!LG SmartWorld服务即将停止运营
男生炫酷“海胆头”参加毕业典礼:嗨翻全场
不必过分担忧大米产需缺口 |当前速讯
获取门禁记录方式-主动获取
软件开发全部文档下载(超过三百份)
天天观天下!一文看懂GPT风口,都有哪些创业机会?
今日要闻!如何把数据从 TDengine 2.x 迁移到 3.x ?
总结Vue3 的一些知识点:Vue3 计算属性
首次10nm以下!三星研发全新4F2内存芯片:面积缩减30% 每日讯息
3199元 铭凡UM790 Pro迷你主机上架:锐龙9 7940HS_每日速讯
OneUI 5.1确认存在锁屏Bug!三星:已进行修复
成都刮起剩菜盲盒风!便宜的临期食品供不应求 焦点播报
葫芦娃救爷爷 理想ONE陷车:拖车、飞度、一串越野车来救均动弹不得|环球快播报
如何改变孩子的坏脾气教育笔记-儿童教育
海通证券联合深交所走进广西开展金融帮扶专项活动-天天头条
最全iOS 上架指南_天天视讯
天天热头条丨Spring Boot + URule 规则引擎,可视化配置太爽了!
亚马逊平台API接口是什么?-全球头条
2 分钟,搞懂 SLO 最佳实践
全网最全Kubernetes(k8s)知识点,看着一篇就够了-当前热讯
【财经分析】推动“1到100”的跨越式发展 长三角崛起生物医药产业“新基建”高地
天天快讯:缩减5G基站招标规模 大幅减少5G投资?中移动回应:外界误读
天天关注:又一个满血14GB/s!PCIe 5.0 SSD用上巨型风扇 太过分了
抗原检测盒优惠了!50人份到手19.9元
白玉兰奖入围名单揭晓 网友:正午阳光赢麻了
抛弃反人类半幅方向盘 特斯拉Cybertruck电动皮卡实车图:今年必交付 当前热门
环球要闻:渗透测试之Payload
7个工程应用中数据库性能优化经验分享
焦点热议:Prometheus笔记-告警规则配置
北京市2023年新增地方政府债务限额1117亿元
收评:沪指午后反弹涨0.35% AI赛道股发力 新能源行业低迷_天天信息
武磊:客场也能感受球迷的热爱和支持 超越一切对立_天天最资讯
手机性价比被吐槽 HTC对元宇宙是真爱:不认同降温说、非常乐观
Redmi性能王者!K60 Ultra工业设计图曝光 前沿资讯
《王者荣耀》体验服爆料:中单法师狂喜 斩杀史诗级优化
全球热消息:导航出错驶入紧急停车带 驶出时被撞 科普:紧急停车带该怎么用
全球视点!内存连续三个季度暴跌 三大厂疯狂减产!想涨价?没门儿
快报:做数据分析的常用方法有哪些?
尚硅谷Hadoop的WordCount案例实操练习出现的bug-环球新视野
JS 里如何实现异步?
如何在上架App之前设置证书并上传应用|全球今头条
海贼王:“七武海”原型揭秘!居然来自30年前游戏《浪漫沙加2》
举报比亚迪排放不达标!长城汽车晒业绩:1-4月同比增长99.1% 买它还是比亚迪?_每日精选
焦点播报:16核R9 7945HX加持!联想公布新版拯救者R9000P参数
世界百事通!法拉第未来官宣:FF 91第一阶段交付5月31日开始 车主先培训
环球视讯!促进跨区域产业链、供应链、创新链、资金链、人才链深度融合,一大批长三角G60科创走廊跨区域合作重点项目签约
广州市花都区秀全中学:720分以上学生可以考虑秀中清北班-世界微头条
易基因:MeRIP-seq等揭示m6A reader YTHDF1在结直肠癌PD-1免疫治疗中的作用|Gut 全球实时
手把手教你在昇腾平台上搭建PyTorch训练环境_天天新要闻
今日上映!《小美人鱼》豆瓣评论:难以接受黑人鱼、强凑CP、毁童年-焦点热门
即时:宝德暴芯x86处理器现身GeekBench 5:坐实就是Intel i3-10105
知名演员罗京民去世 曾饰演许三多的爹:张译等人发文悼念 焦点速递
ST浩源:截至2023年5月20日,公司股东14658户,谢谢对公司的关注!|天天最新
每个.NET开发都应该知道的10个.NET库
关于AWS中VPC下的IGW-internet gateway的创建与说明
升级天玑8200处理器:vivo S17 Pro现身Geekbench
曝小米13 Ultra欧洲售价超1.1万元:比iPhone 14 Pro、华为P60 Pro都贵_世界今日讯
全球球精选!破首发仅7499元!华硕天选4游戏本配锐龙9与RTX4060:高性价比真香
热点!散了吧!特斯拉车顶维权女车主败诉:刹车失灵观点站不住脚 没任何证据证明
《变形金刚7:超能勇士崛起》超燃特辑出炉:保时捷964街头飞车_热资讯
Netty实战(三)
上市公司实控人离婚140亿归女方,盘点彤程新材投资版图
千元神机!荣耀X50首发骁龙6 Gen1:一亿像素加持
育碧再次背离玩家!《刺客信条:幻景》PC端Steam独不占_世界百事通
一眼假的诈骗短信是骗子智商不够吗?官方:这是极高效率筛选受害者
京东618大促攻略:iPhone 14 Pro系列直降1800元 多会员年卡探底|环球视点
百度文心大模型3.5版要来了!李彦宏:大模型将改变世界 环球热门
屹通新材:5月25日融资买入167.73万元,融资融券余额3877.74万元
统信UOS系统开发笔记(一):国产统信UOS系统搭建开发环境之虚拟机安装
揭秘百度IM消息中台的全量用户消息推送技术改造实践
Python工具箱系列(三十三)
海内外直播源码加密技术保障您的隐私安全 焦点快播
Windows下使用docker部署.Net Core 全球今热点
一天斩获3个冠军!全国花游冠军赛北京队“开门红”-快看点
DXO拍照全球第一!华为P60 Pro新增12GB+256GB版本 6488元
单价6.5亿 想坐吗?国产大飞机C919商业首航来了:5月28日、上海至北京_微头条
神操作 小汽车撞倒闯红灯三轮车后居然直接走了 无责变有责
糟糕!下一轮国内油价调整“由跌转涨”:当前上调75元/吨 今日快讯
牌面!福特CEO称特斯拉不是最大竞争对手 比亚迪才是 环球新消息
环球视讯!UE/虚幻 蓝图实现通过http获取数据(以高德地图API为例)&Json格式数据的读取
标准化考场时间同步系统(网络时钟系统)规划建设应用 每日快播
Java设计模式-策略模式|环球快资讯
焦点要闻:美联储加息预期升温 美元兑日元汇率再度站上140
计算机时代变了 NVIDIA黄仁勋:CPU用得越来越少 GPU才是关键|世界实时
【世界快播报】自研火箭发射8颗卫星 韩国表态已成航天强国:仅中美等7国做到
当前快报:跟比亚迪海豚争场子 五菱云朵8月上市:10万级大五座纯电新宠
焦点观察:优派推出新款27寸4K Mini LED显示器:支持96W反向充 2999元
山东一高速现天价救援费:20公里被收11000元 结局大快人心 观天下
世界热点!Fastjson 很快,但不适合我....
每日观点:干瘦肉炒什么配菜好吃?
一季度垃圾短信投诉5万件 官方揭秘:主要是这10家公司发的
18888元求票 五月天黄牛票涨回去了?29名黄牛被查处|当前简讯
你吃过没?商家回应淄博烧烤降温:再不降温我们也受不了|新消息
世界消息!成都一轿车冲进店铺撞坏16个骨灰盒 现场损坏严重:网友称是大众