WUP-MY-LABEL-PRINTER 旻佑热敏打印机标签打印uniapp插件使用说明

news2024/11/17 1:26:46

插件地址:WUP-MY-LABEL-PRINTER 旻佑热敏打印机标签打印安卓库

简介

  1. 本插件主要用于旻佑热敏打印机打印标签,不支持票据打印。
  2. 适用于旻佑的各型支持标签打印的热敏打印机。
  3. 本插件开发时使用的打印机型号为MY-805嵌入式面板打印机,其他型号请先试用测试。
  4. 使用本插件需要在Android 5.0以上设备使用。
  5. 插件支持uniapp的vue2 和 vue3 版本;uniapp x没做支持,可自行测试。
  6. 初始化流程:获取设备-打开设备-设置多字节模式及编码。
  7. 打印流程:标签页开始-绘制内容-打印,打印每一页标签都是这个流程。
    在这里插入图片描述
    在这里插入图片描述

方法

方法引入

import { sayHi, 需引入的其他方法 } from "@/uni_modules/WUP-MY-LABEL-PRINTER";

插件测试方法

sayHi("wup-my-label-printer", function (res) {
	console.log("sayHi", res)
})

枚举本地USB打印设备

enumUsb((res) => {
	console.log("enumUsb", res)
})

打开USB设备

  • usbDeviceStr:枚举的USB列表的中USB设备名
  • autoReplyMode:自动回传模式 0,不开启;1,开启
openUsb(usbDeviceStr, autoReplyMode, (res) => {
	console.log("openUsb", res)
})

启用标签模式

labelEnableLabelMode((res) => {
	console.log("labelEnableLabelMode", res)
})

关闭标签模式

labelDisableLabelMode((res) => {
	console.log("labelEnableLabelMode", res)
})

全切纸

打印时全切纸推荐使用labelPagePrintAndFullCutPaper,不推荐打印后再单独调用,可能出现切纸位置不准确问题。

fullCutPaper((res) => {
	console.log("fullCutPaper", res)
})

半切纸

打印时半切纸推荐使用labelPagePrintAndHalfCutPaper,不推荐打印后再单独调用,可能出现切纸位置不准确问题。

halfCutPaper((res) => {
	console.log("halfCutPaper", res)
})

设置打印机为多字节模式及编码

  • encoding:编码 0,GBK;1,UTF8;3,BIG5;4,ShiftJIS;5,EUCKR
setMultiByteEncoding(encoding, (res) => {
	that.msg = JSON.stringify(res)
	console.log("setMultiByteEncoding", res)
})

校准标签纸(更换不同规格标签纸,需要校准)

labelCalibrateLabel((res) => {
	console.log("labelCalibrateLabel", res)
})

走纸到标签缝隙处

labelFeedLabel((res) => {
	console.log("labelFeedLabel", res)
})

打印机退纸到打印位置(适用于标签打印开头定位)

labelBackPaperToPrintPosition((res) => {
	console.log("labelBackPaperToPrintPosition", res)
})

打印机进纸到撕纸位置(适用于标签打印结束定位)

labelFeedPaperToTearPosition((res) => {
	console.log("labelFeedPaperToTearPosition", res)
})

指示一个标签页面的开始,并设置标签页的大小,参考点坐标和页面旋转角度

  • x:页面起始点X轴坐标
  • y:页面起始点Y轴坐标
  • width:页面宽度
  • height:页面高度
  • rotation:页面旋转 0,页面不旋转;1,页面旋转90° 标签打印不支持旋转属性,默认0就好。
labelPageBegin(x, y, width, height, rotation, (res) => {
	console.log("labelPageBegin", res)
})

将标签页上的内容打印到标签纸上

  • copies:打印分数[1 - 255]
labelPagePrint(copies, (res) => {
	console.log("labelPagePrint", res)
})

将标签页上的内容打印到标签纸上,并半切纸

  • copies:打印分数[1 - 255]
labelPagePrintAndHalfCutPaper(copies, (res) => {
	console.log("labelPagePrintAndHalfCutPaper", res)
})

将标签页上的内容打印到标签纸上,并全切纸

  • copies:打印分数[1 - 255]
labelPagePrintAndFullCutPaper(copies, (res) => {
	console.log("labelPagePrintAndFullCutPaper", res)
})

获取文本字符风格值(异步)

  • bold:是否加粗 false,否;true,是
  • underline:是否下划线 false,否;true,是
  • highlight:是否反白(黑底白字) false,否;true,是
  • strikethrough:是否删除线 false,否;true,是(MY805测试无效
  • rotation:旋转 0,不旋转;1,90°;2,180°;3,270°
  • widthscale:字体宽度放大倍数
  • heightscale:字体高度放大倍数
getLabelTextStyle(bold, underline, highlight, strikethrough, rotation, widthscale, heightscale, (res) => {
	console.log("getLabelTextStyle", res)
})

获取文本字符风格值(同步)

  • bold:是否加粗 false,否;true,是
  • underline:是否下划线 false,否;true,是
  • highlight:是否反白(黑底白字) false,否;true,是
  • strikethrough:是否删除线 false,否;true,是(MY805测试无效
  • rotation:旋转 0,不旋转;1,90°;2,180°;3,270°
  • widthscale:字体宽度放大倍数
  • heightscale:字体高度放大倍数
const res = getLabelTextStyleSync(bold, underline, highlight, strikethrough, rotation, widthscale, heightscale)
console.log("getLabelTextStyleSync", res)

在标签页面上指定位置绘制文本(只能单行打印)。

labelDrawText(x, y, font, style, str, (res) => {
	that.msg = JSON.stringify(res)
	console.log("labelDrawText", res)
})

在标签页指定位置绘制一维条码

  • x:页面起始点X轴坐标
  • y:页面起始点Y轴坐标
  • nBarcodeType:标识条码类型 0,UPCA;1,UPCE;2,EAN13;3,EAN8;4,CODE39;5,ITF;6,CODEBAR;7,CODE93;8,CODE128;9,CODE11;10,MSI;11,128M;12,EAN128;13,25C;14,39C;15,39;16,EAN13PLUS2;17,EAN13PLUS5;18,EAN8+2;19,EAN8PLUS5;20,POST;21,UPCAPLUS2;22,UPCAPLUS5;23,UPCEPLUS2;24,UPCEPLUS5;25,CPOST;26,MSIC;27,PLESSEY;28,ITF14;29,EAN14;
  • nBarcodeTextPrintPosition:条码可读字符位置 0,不显示可读字符;1,下方显示;2,上方显示;3,上方和下方显示
  • height:条码高度
  • unitwidth:码块单元宽度
  • rotation:旋转 0,不旋转;1,90°;2,180°;3,270°
  • str:要打印的条码
labelDrawBarcode(x, y, nBarcodeType, nBarcodeTextPrintPosition, height, unitwidth,  rotation, str, (res) => {
	console.log("labelDrawBarcode", res)
})

在标签页指定位置绘制二维码

  • x:页面起始点X轴坐标
  • y:页面起始点Y轴坐标
  • nVersion:字符版本(不知道用处,默认0就好)
  • nECCLevel:ECC纠错等级 1,L:7%,低纠错,数据多;2,M:15%,中纠错;3,Q:优化纠错;4,H:30%,最高纠错,数据少
  • unitwidth:码块单元宽度(MY-805实测最大可为8,超过8会出现打印无反应,可以根据实际调整)
  • rotation:旋转 0,不旋转;1,90°;2,180°;3,270°
  • str:要打印的二维码
labelDrawQRCode(x, y, nVersion, nECCLevel, unitwidth,  rotation, str, (res) => {
	console.log("labelDrawQRCode", res)
})

在标签页指定位置绘制 PDF417 条码

  • x:页面起始点X轴坐标
  • y:页面起始点Y轴坐标
  • column:列数,表述每行容纳多少码字。一个码字为 17*UnitWidth 个点。行数由打印机自动产生,行数范围限定为 3~90。ColNum 的取值范围:[1,30]。
  • nAspectRatio:条码模块的高宽比
  • nECCLevel:ECC纠错等级,取值范围[0, 8]
    纠错等级取值纠错码数可存资料量(字节)
    021108
    141106
    281101
    3161092
    4321072
    5641024
    6128957
    7256804
    8512496
  • unitwidth:码块单元宽度,取值范围[1, 3]
  • rotation:旋转 0,不旋转;1,90°;2,180°;3,270°
  • str:要打印的PDF417条码
labelDrawPDF417Code(x, y, column, nAspectRatio, nECCLevel, unitwidth,  rotation, str, (res) => {
	console.log("labelDrawPDF417Code", res)
})

在标签页指定位置绘制位图

  • x:页面起始点X轴坐标
  • y:页面起始点Y轴坐标
  • dstw:要打印的宽度
  • dsth:要打印的高度
  • pszFile:图片路径,插件assets目录下路径,不需含assets
  • binaryzation_method:图片二值化算法 0,表示抖动算法;1,表示阀值算法;2,表示误差扩散法。具体效果请测试查看。
  • compression_method:最终打印数据的压缩方式 0,不压缩;1,一级压缩;2,二级压缩
labelDrawImageFromFile(x, y, dstw, dsth, pszFile, binaryzation_method, compression_method, (res) => {
	console.log("labelDrawImageFromFile", res)
})

在标签页指定位置绘制线段

  • startx:直线段起始点 x 坐标值,取值范围:[0, Page_Width-1]。
  • starty:直线段起始点 y 坐标值,取值范围:[0,Page_Height-1]。
  • endx:直线段终止点 x 坐标值,取值范围:[0, Page_Width-1]。
  • endy:直线段终止点 y 坐标值,取值范围:[0,Page_Height-1]。
  • linewidth:直线段线宽,取值范围:[1,Page_Height-1]。
  • linecolor:直线段颜色线条颜色,0,白色;1,是黑色
labelDrawLine(startx, starty, endx, endy, linewidth, linecolor, (res) => {
	console.log("labelDrawLine", res)
})

在标签页指定位置绘制矩形

  • x:页面起始点X轴坐标
  • y:页面起始点Y轴坐标
  • width:矩形宽度
  • height:矩形高度
  • color:矩形颜色 0,白色;1,是黑色
labelDrawRect(x, y, width, height, color, (res) => {
	console.log("labelDrawRect", res)
})

在标签页指定位置绘制矩形框

  • x:页面起始点X轴坐标
  • y:页面起始点Y轴坐标
  • width:矩形宽度
  • height:矩形高度
  • borderwidth:矩形框边框宽度
  • bordercolor:矩形框边框颜色 0,白色;1,是黑色
labelDrawBox(x, y, width, height, borderwidth, bordercolor, (res) => {
	console.log("labelDrawBox", res)
})

获取开发包版本字符串

getLibraryVersion((res) => {
	console.log("getLibraryVersion", res)
})

示例代码

<template>
	<view>
		<view style="margin-top: 50px;padding: 0 15px;">
			<button @click="enumUsb" type="primary" style="margin-bottom: 15px;">usb设备列表</button>
			<button @click="openUsb" type="primary" style="margin-bottom: 15px;">打开usb设备</button>
			<button @click="halfCutPaper" type="primary" style="margin-bottom: 15px;">半切纸</button>
			<button @click="fullCutPaper" type="primary" style="margin-bottom: 15px;">全切纸</button>
			<button @click="getLibraryVersion" type="primary" style="margin-bottom: 15px;">获取开发包版本字符串</button>
			<button @click="labelEnableLabelMode" type="primary" style="margin-bottom: 15px;">开启标签打印</button>
			<button @click="labelDisableLabelMode" type="primary" style="margin-bottom: 15px;">关闭标签打印</button>
			<button @click="labelCalibrateLabel" type="primary" style="margin-bottom: 15px;">校准标签纸</button>
			<button @click="labelFeedLabel" type="primary" style="margin-bottom: 15px;">走纸到标签缝隙处</button>
			<button @click="labelBackPaperToPrintPosition" type="primary" style="margin-bottom: 15px;">退纸到打印位置</button>
			<button @click="labelFeedPaperToTearPosition" type="primary" style="margin-bottom: 15px;">进纸到撕纸位置</button>
			<view style="margin: 50px 0 15px 0;font-size: 2rem;font-weight: bold;">打印</view>
			<button @click="labelPageBegin" type="primary" style="margin-bottom: 15px;">标签页开始</button>
			<!-- <button @click="getLabelTextStyle" type="primary" style="margin-bottom: 15px;">获取文本样式</button> -->
			<button @click="labelDrawText" type="primary" style="margin-bottom: 15px;">绘制文本</button>
			<button @click="labelDrawBarcode" type="primary" style="margin-bottom: 15px;">绘制条形码</button>
			<button @click="labelDrawQRCode" type="primary" style="margin-bottom: 15px;">绘制二维码</button>
			<button @click="labelDrawPDF417Code" type="primary" style="margin-bottom: 15px;">绘制PDF417</button>
			<button @click="labelDrawImageFromFile" type="primary" style="margin-bottom: 15px;">绘制本地图片</button>
			<button @click="labelDrawLine" type="primary" style="margin-bottom: 15px;">绘制线段</button>
			<button @click="labelDrawRect" type="primary" style="margin-bottom: 15px;">绘制矩形</button>
			<button @click="labelDrawBox" type="primary" style="margin-bottom: 15px;">绘制矩形框</button>
			<button @click="labelPagePrint" type="primary" style="margin-bottom: 15px;">打印</button>
			<button @click="labelPagePrintAndHalfCutPaper" type="primary" style="margin-bottom: 15px;">半切打印</button>
			<button @click="labelPagePrintAndFullCutPaper" type="primary" style="margin-bottom: 15px;">全切打印</button>
			<button @click="print" type="primary" style="margin-bottom: 15px;">完整打印示例</button>
		</view>
		<view style="padding: 15px 30px;">
			{{msg}}
		</view>
	</view>
</template>

<script>
	import { fullCutPaper, halfCutPaper, openUsb, sayHi, setMultiByteEncoding, enumUsb, getLibraryVersion, labelEnableLabelMode, labelDisableLabelMode, labelCalibrateLabel, labelFeedLabel, labelBackPaperToPrintPosition, labelFeedPaperToTearPosition, labelPageBegin, labelDrawText, labelPagePrint, getLabelTextStyle, getLabelTextStyleSync, labelDrawBarcode, labelDrawQRCode, labelDrawPDF417Code, labelDrawImageFromFile, labelDrawLine, labelDrawRect, labelDrawBox, labelPagePrintAndFullCutPaper, labelPagePrintAndHalfCutPaper } from "@/uni_modules/WUP-MY-LABEL-PRINTER";
	export default {
		data() {
			return {
				msg: "",
				deviceInx: 0,
			}
		},
		onLoad() {
			let that = this
			sayHi("wup-my-label-printer", function (res) {
				console.log("sayHi", res)
			})
		},
		methods: {
			print () {
				let that = this
				labelPageBegin(0, 0, 530, 390, 0, (res) => {
					that.msg = JSON.stringify(res)
					console.log("labelPageBegin", res)
				})
				labelDrawText(10, 10, 24, getLabelTextStyleSync(true, false, false, true, 0, 1, 1), "Hello World!", (res) => {
					that.msg = JSON.stringify(res)
					console.log("labelDrawText", res)
				})
				labelDrawQRCode(10, 40, 0, 1, 4, 0, "https://blog.csdn.net/Douz_lungfish", (res) => {
					that.msg = JSON.stringify(res)
					console.log("labelDrawQRCode", res)
				})
				labelDrawImageFromFile(200, 30, 125, 125, "logo.png", 0, 0, (res) => {
					that.msg = JSON.stringify(res)
					console.log("labelDrawImageFromFile", res)
				})
				labelDrawLine(10, 180, 300, 180, 5, 1, (res) => {
					that.msg = JSON.stringify(res)
					console.log("labelDrawLine", res)
				})
				labelDrawBox(0, 10, 530, 380, 2, 1, (res) => {
					that.msg = JSON.stringify(res)
					console.log("labelDrawBox", res)
				})
				labelPagePrintAndFullCutPaper(1, (res) => {
					that.msg = JSON.stringify(res)
					console.log("labelPagePrintAndFullCutPaper", res)
				})
			},
			getLabelTextStyle () {
				let that = this
				// bold, underline, highlight, strikethrough, rotation, widthscale, heightscale
				getLabelTextStyle(true, true, false, false, 1, 1, 1, (res) => {
					that.msg = JSON.stringify(res)
					console.log("getLabelTextStyle", res)
				})
				const res1 = getLabelTextStyleSync(true, true, false, false, 1, 1, 1)
				console.log("getLabelTextStyleSync", res1)
			},
			labelPagePrint () {
				let that = this
				labelPagePrint(1, (res) => {
					that.msg = JSON.stringify(res)
					console.log("labelPagePrint", res)
				})
			},
			labelPagePrintAndHalfCutPaper () {
				let that = this
				labelPagePrintAndHalfCutPaper(1, (res) => {
					that.msg = JSON.stringify(res)
					console.log("labelPagePrintAndHalfCutPaper", res)
				})
			},
			labelPagePrintAndFullCutPaper () {
				let that = this
				labelPagePrintAndFullCutPaper(1, (res) => {
					that.msg = JSON.stringify(res)
					console.log("labelPagePrintAndFullCutPaper", res)
				})
			},
			labelDrawText () {
				let that = this
				labelDrawText(10, 10, 24, getLabelTextStyleSync(true, false, false, true, 0, 1, 1), "Hello World!", (res) => {
					that.msg = JSON.stringify(res)
					console.log("labelDrawText", res)
				})
			},
			labelDrawBarcode () {
				let that = this
				labelDrawBarcode(10, 70, 0, 1, 60, 2, 0, "02031344565", (res) => {
					that.msg = JSON.stringify(res)
					console.log("labelDrawBarcode", res)
				})
			},
			labelDrawQRCode () {
				let that = this
				// x, y, nVersion, nECCLevel, unitwidth,  rotation, str
				labelDrawQRCode(10, 10, 0, 1, 8, 0, "https://blog.csdn.net/Douz_lungfish", (res) => {
					that.msg = JSON.stringify(res)
					console.log("labelDrawQRCode", res)
				})
			},
			labelDrawPDF417Code () {
				let that = this
				// x, y, column, nAspectRatio, nECCLevel, unitwidth,  rotation, str
				labelDrawPDF417Code(10, 10, 5, 5, 0, 3, 0, "Hello World!", (res) => {
					that.msg = JSON.stringify(res)
					console.log("labelDrawPDF417Code", res)
				})
			},
			labelDrawImageFromFile () {
				let that = this
				// x, y, dstw, dsth, pszFile,  binaryzation_method, compression_method
				labelDrawImageFromFile(10, 30, 200, 200, "la/logo.png", 0, 0, (res) => {
					that.msg = JSON.stringify(res)
					console.log("labelDrawImageFromFile", res)
				})
			},
			labelDrawLine () {
				let that = this
				// startx, starty, endx, endy, linewidth, linecolor
				labelDrawLine(10, 10, 100, 20, 30, 1, (res) => {
					that.msg = JSON.stringify(res)
					console.log("labelDrawLine", res)
				})
			},
			labelDrawRect () {
				let that = this
				// x, y, width, height, color
				labelDrawRect(10, 10, 100, 80, 1, (res) => {
					that.msg = JSON.stringify(res)
					console.log("labelDrawRect", res)
				})
			},
			labelDrawBox () {
				let that = this
				// x, y, width, height, borderwidth, bordercolor
				labelDrawBox(10, 10, 100, 80, 2, 1, (res) => {
					that.msg = JSON.stringify(res)
					console.log("labelDrawBox", res)
				})
			},
			labelPageBegin () {
				let that = this
				labelPageBegin(0, 0, 576, 240, 0, (res) => {
					that.msg = JSON.stringify(res)
					console.log("labelPageBegin", res)
				})
			},
			labelFeedPaperToTearPosition () {
				let that = this
				labelFeedPaperToTearPosition((res) => {
					that.msg = JSON.stringify(res)
					console.log("labelFeedPaperToTearPosition", res)
				})
			},
			labelBackPaperToPrintPosition () {
				let that = this
				labelBackPaperToPrintPosition((res) => {
					that.msg = JSON.stringify(res)
					console.log("labelBackPaperToPrintPosition", res)
				})
			},
			labelFeedLabel () {
				let that = this
				labelFeedLabel((res) => {
					that.msg = JSON.stringify(res)
					console.log("labelFeedLabel", res)
				})
			},
			labelCalibrateLabel () {
				let that = this
				labelCalibrateLabel((res) => {
					that.msg = JSON.stringify(res)
					console.log("labelCalibrateLabel", res)
				})
			},
			labelDisableLabelMode () {
				let that = this
				labelDisableLabelMode((res) => {
					that.msg = JSON.stringify(res)
					console.log("labelEnableLabelMode", res)
				})
			},
			labelEnableLabelMode () {
				let that = this
				labelEnableLabelMode((res) => {
					that.msg = JSON.stringify(res)
					console.log("labelEnableLabelMode", res)
				})
			},
			getLibraryVersion () {
				let that = this
				getLibraryVersion((res) => {
					that.msg = JSON.stringify(res)
					console.log("getLibraryVersion", res)
				})
			},
			enumUsb () {
				let that = this
				enumUsb((res) => {
					that.msg = JSON.stringify(res)
					console.log("enumUsb", res)
				})
			},
			openUsb () {
				let that = this
				openUsb('KCEC_USB in FS Mode/0E08F5C2050601006415000055080172', 1, (res) => {
					that.msg = JSON.stringify(res)
					if (res.code === 0) {
						setMultiByteEncoding(1, (res) => {
							that.msg = JSON.stringify(res)
							console.log("setMultiByteEncoding", res)
						})
					}
					console.log("openUsb", res)
				})
			},
			halfCutPaper () {
				let that = this
				halfCutPaper((res) => {
					that.msg = JSON.stringify(res)
					console.log("halfCutPaper", res)
				})
			},
			fullCutPaper () {
				let that = this
				fullCutPaper((res) => {
					that.msg = JSON.stringify(res)
					console.log("fullCutPaper", res)
				})
			},
		}
	}
</script>

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Cisco交换机SSH使用RSA公钥免密登录(IOS与Nexus,服务器以RHEL8为例)

目录 需求实验步骤0. 实验环境1. Linux2. CiscoIOS基础设置保存密钥登陆测试 3. CiscoNexus基础配置保存密钥登陆测试 需求 在实际工作中&#xff0c;常会遇到自动化的需求&#xff0c;那么在自动采集、配置等对网络设备的自动化需求中&#xff0c;不可避免的会遇到需要登录-&…

tensorboard显示一片空白解决方案

OK艾瑞巴蒂 不知道看这个视频几个小土堆过来的&#xff0c;今天已经发了一篇博文探讨快速下载tensorboard了 下面用的时候叒出现问题了 from torch.utils.tensorboard import SummaryWriter writer SummaryWriter("logs")# writer.add_image() # Yx for i in range…

实时手势识别(1)- 基于手部检测+手部分类

目录 前言 1.实现效果 2.非端到端实现的原因 3.分类网络与数据准备 4.训练结果 5.测试结果 6.训练代码 7.训练日志 7.1ResNet18训练日志 7.2ShuffleNet_v2训练日志 前言 利用YOLOv8获取手部区域&#xff0c;然后对手部区域进行分类&#xff0c;实现手势识别。 本文使…

powershell 终端 执行 pnpm -v报错

1.问题描述&#xff1a; 明明全局已安装 pnpm &#xff0c;但在vscode默认终端 powershell 执行 pnpm -v 却报错&#xff1a; 2.问题根因&#xff1a; 原因是 PowerShell 执行策略问题。 3.解决方案&#xff1a; 以管理员身份运行 PowerShell 查看 PowerShell 的执行策略…

初探systemⅡ·慢思考

本篇笔记记录于 May 30th, 2023 oai联合创始人Andrej曾在微软大会上的报告中有提到LLMs对于人类快、慢思考两种认知推理模式的当下探索与未来展望&#xff0c;这里曾经得到的启示是&#xff1a;未来在模型的训练与推理侧是否会出现一种新的长链认知范式&#xff1f;如在RLHF过程…

秋招突击——8/13——并查集——复习{有塔一面}——新作{亲戚关系}

文章目录 引言复习并查集模板复习——有塔一面 新作亲戚关系 总结 引言 这两天准备腾讯的第二面&#xff0c;看了很多人的面经&#xff0c;发现考并查集的题目蛮多的&#xff0c;这里整理学习一下&#xff01; 复习 并查集模板 这里学习了B站的麦克老师的课程&#xff0c;对…

MySQL与SQLserver

与MySQL的差别 SQL Server和MySQL都是广泛使用的关系数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它们的SQL语法有很多相似之处&#xff0c;但也存在一些差异。以下是一些主要的语法区别&#xff1a; 1. 数据库和表的创建 SQL Server CREATE DATABASE databas…

Ma Spaghet!

目录 一、题目 二、思路 三、payload 3.1 方案一 3.2 方案二(官方) 四、思考与总结 一、题目 <!-- Challenge --> <h2 id"spaghet"></h2> <script>spaghet.innerHTML (new URL(location).searchParams.get(somebody) || "Somebody…

产品经理-​你做产品经理有什么优势?(39)

你做产品经理有什么优势&#xff1f; 这是一个关于自我认知、个人优势的问题 人贵有自知之明&#xff0c;求职者应该对自己的优缺点有一个客观、深入的认识 大公司往往更加看重你的基本素质&#xff08;逻辑分析、学习能力、潜力等&#xff09; 因为大公司有相对成熟的培养体系…

OpenDDS的Rtps_Udp传输协议可靠性QoS收发基本流程

OpenDDS中,实现了Rtps_Udp传输协议(非纯udp)的可靠性传输。传输的线程包括: 1)发送方线程主要线程和定时器 《1》应用线程 《2》网络异步发送线程 《3》Heartbeat定时器 《4》Nak_response定时器 2)接收方主要线程和定时器 《1》网络异步接收线程 《2》heartbeat_respons…

Java | Leetcode Java题解之第344题反转字符串

题目&#xff1a; 题解&#xff1a; class Solution {public void reverseString(char[] s) {int n s.length;for (int left 0, right n - 1; left < right; left, --right) {char tmp s[left];s[left] s[right];s[right] tmp;}} }

【C++】智能指针详解

一、从new和delete谈起 在C中&#xff0c;可以使用new和delete关键字进行对象的创建和销毁&#xff0c;new一个对象实际上是在堆上分配内存&#xff0c;而new出来的对象也要自己用delete释放&#xff0c;从而回收内存&#xff0c;否则会造成内存的泄露。由程序员自己new来分配…

[手机Linux PostmarketOS]五, docker安装和使用

docker容器 一&#xff0c;docker安装和配置 安装 docker 和 docker-compose&#xff1a; sudo apk add docker docker-cli-compose #安装docker sudo service docker start #启动docker服务 sudo rc-update add docker default #设置docker为自启动可选关…

【PostgreSQL003】PostgreSQL数据表空间膨胀,磁盘爆满,应用宕机(经验总结,已更新)

1.一直以来想写下基于PostgreSQL的系列文章&#xff0c;作为较火的数据ETL工具&#xff0c;也是日常项目开发中常用的一款工具&#xff0c;最近刚好挤时间梳理、总结下这块儿的知识体系。 2.熟悉、梳理、总结下PostgreSQL数据库相关知识体系。空间膨胀&#xff08;主键、外键、…

汇编语言:call、call far ptr、call word ptr、call dword ptr、call 寄存器

引言 call指令是转移指令&#xff0c;CPU执行call指令&#xff0c;进行两步操作&#xff1a; &#xff08;1&#xff09;将当前IP或当前CS和IP压入栈中 &#xff08;2&#xff09;转移。call指令不能短转移&#xff0c;除此之外&#xff0c;call指令转移的方法跟jmp指令的原理…

柔性超级电容器咋储能?生物聚合物在其中起啥作用?有啥挑战?

*本文只作阅读笔记分享* 一、引言 随着对化石燃料影响的日益关注&#xff0c;开发用于先进电化学能量存储设备的绿色和可再生材料变得至关重要。超级电容器因其出色的寿命、安全性和宽温度操作范围等优势而成为有前途的储能候选者。柔性超级电容器特别适合为轻质可穿戴电子设…

xss GAME (xss漏洞攻击1-8)

目录 xss网页链接 第一关 第二关 第三关 ​编辑第四关 ​编辑第五关 ​编辑第六关 第七关 第一种 Function构建函数 第二种 tostring parseInt 第三种 silce() ​编辑第八关&#xff08;安全过滤框架 dom破坏&#xff09; xss网页链接 XSS Game - Learning XSS Ma…

linux之网络子系统-GSO/TSO 源码分析

一、GSO/TSO GSO 目前在内核5.10.* 版本时&#xff0c;已经是合入主线&#xff0c;就是对TCP/UDP都支持并且在网络协议栈GSO功能是默认打开的。虽然可以通过ethtool -K 网卡名 gso off 关闭&#xff0c;但是在L3/L4还是走GSO逻辑&#xff0c;关不掉。我目前是没有找到内核源码…

NextJs - 服务端/客户端组件之架构多样性设计

NextJs - 服务端/客户端组件之架构多样性设计 前言一. 架构设计1.1 SSR流式渲染常见错误设计之 - 根页面同步阻塞1.2 架构设计之 - 客户端组件依赖于服务端组件数据① 使用 Redux 完成数据共享 1.3 架构设计之 - 单页内的分步骤跳转① 如何做到服务端组件和客户端组件之间的切换…

libevent之android与鸿蒙编译过程

背景 最近基于libevent开发了一个端侧的缓存代理库&#xff0c;先是基于macOS编译开发的&#xff0c;基本0问题&#xff0c;后来移植到鸿蒙与android时遇到一些编译链接问题。 libevent版本如下&#xff1a; 软件版本号libevent-2.1.8 android编译 编译环境 android studio…