当前位置: 首页 > news >正文

VUE3+TypeScript项目,使用html2Canvas+jspdf生成PDF并实现--分页--页眉--页尾

使用html2Canvas+JsPDF生成pdf,并实现分页添加页眉页尾

1.封装方法htmlToPdfPage.ts

/**path: src/utils/htmlToPdfPage.tsname: 导出页面为PDF格式 并添加页眉页尾
**/
/*** 封装思路* 1.将页面根据A4大小分隔边距,避免内容被中间截断* 所有元素层级不要太深,只有一个表格需要再深入判断,向上统计高度* const parentElement = document.querySelector('.el-form');const childElements = parentElement.childNodes;const filteredChildElements = Array.from(childElements).filter((node) => node.nodeType === Node.ELEMENT_NODE);* 2.根据元素的层级关系,循环childElements计算元素的高度* 3.将页面转换成Canvas,根据canvas的高度来截取分页图片高度* 4.使用pdfjs截取canvas生成的图片根据A4高度逐渐加入到pdf中,pdf.addPage(),pdf.addImage()addImage(图片canvas资源,格式,图片宽度的x轴,图片高度的y轴,图片宽度,图片高度)
**/
import { uploadFile } from '@/api/common'
import html2Canvas from 'html2canvas'
import JsPDF from 'jspdf'const A4_WIDTH = 595
const A4_HEIGHT = 842
const pdf = new JsPDF({unit: 'pt',format: 'a4',orientation: 'p'
})
// 转换为canvas
const toCanvas = async (element:any) => {// canvas元素// debuggerconst canvas = await html2Canvas(element, {allowTaint: true, // 允许渲染跨域图片scale: window.devicePixelRatio * 2, // 增加清晰度useCORS: true // 允许跨域})const canvasWidth = canvas.width // 获取canavs转化后的宽度const canvasHeight = canvas.height // 获取canvas转化后的高度const height = Math.floor(595 * canvasHeight / canvasWidth) // 根据595宽度比例计算canvas的高度// 转化成图片Dataconst canvasData = await canvas.toDataURL('image/jpeg', 1.0)return { canvasWidth, canvasHeight, height, data: canvasData }
}export const htmlToPdfPage: any = {async getPdf (title:any) {return new Promise((resolve, reject) => {html2Canvas(document.querySelector('#pdfPage') as any, {allowTaint: true, // 允许渲染跨域图片scale: window.devicePixelRatio * 2, // 增加清晰度useCORS: true // 允许跨域}).then(async (canvas) => {// 内容的宽度const contentCanvasWidth = canvas.width// 内容高度const contentCanvasHeight = canvas.height// 按照a4纸的尺寸[595,842]计算内容canvas一页高度const oneCanvasHeight = Math.floor(contentCanvasWidth * 842 / 595)// 未生成pdf的html页面高度let remainingHeight = contentCanvasHeight// 页面偏移let position = 0 // 上下边距分别为10// 每页宽度,A4比例下canvas内容高度const imgWidth = 595const imgHeight = 595 * contentCanvasHeight / contentCanvasWidth// ************************************  计算页码 start  ********************************************const headerDom: any = document.querySelector('#pdfPage-header')const { height: imgHeaderHeight, canvasHeight: headerCanvasHeight } = await toCanvas(headerDom)const footerDom: any = document.querySelector('#pdfPage-footer')const { height: imgFooterHeight, canvasHeight: footerCanvasHeight } = await toCanvas(footerDom)// 一页高度减去页眉页尾后内容的高度const contentHeight = oneCanvasHeight - headerCanvasHeight - footerCanvasHeight// 总页数const totalPage = Math.ceil(contentCanvasHeight / contentHeight)// ************************************  计算页码 end  ********************************************// canvas转图片数据const pageData = canvas.toDataURL('image/jpeg', 1.0)// 新建JsPDF对象const PDF = new JsPDF('' as any, 'pt', 'a4')let pageNumber = 1 // 页数// 判断是否分页if (remainingHeight < oneCanvasHeight) {await addHeader(PDF, pageNumber, totalPage)PDF.addImage(pageData, 'JPEG', 0, imgHeaderHeight, imgWidth, imgHeight)await addFooter(PDF)position -= 842} else {while (remainingHeight > 0) {if (position === 0) {await addHeader(PDF, pageNumber, totalPage)PDF.addImage(pageData, 'JPEG', 0, imgHeaderHeight, imgWidth, imgHeight)await addFooter(PDF)} else {PDF.addImage(pageData, 'JPEG', 0, position + (pageNumber * imgHeaderHeight) + ((pageNumber - 1) * imgFooterHeight), imgWidth, imgHeight)await addHeader(PDF, pageNumber, totalPage)await addFooter(PDF)}position -= 842remainingHeight -= oneCanvasHeightpageNumber += 1if (remainingHeight > 0) {PDF.addPage()}}}// 保存文件--测试PDF.save(title + '.pdf')resolve(1)// 上传文件--实现功能// const formData = new FormData()// formData.append('file', PDF.output('blob'), title + '.pdf')// uploadFile(formData).then((res:any) => {//   resolve(res)// }).catch((err:any) => {//   reject(err)// })})})}
}
// 添加页眉
const addHeader = async (pdf: any, currentPage?: any, totalPage?: any) => {const headerDom: any = document.querySelector('#pdfPage-header')const newHeaderDom = headerDom.cloneNode(true)if (currentPage && totalPage) {newHeaderDom.querySelector('#pdfPage-page').innerText = currentPagenewHeaderDom.querySelector('#pdfPage-total').innerText = totalPage}document.documentElement.append(newHeaderDom)const { height: imgHeaderHeight, data: headerCanvas } = await toCanvas(newHeaderDom)// const imgHeaderHeight = 595 * headerHegith / headerWidthawait pdf.addImage(headerCanvas, 'JPEG', 0, 0, A4_WIDTH, imgHeaderHeight)
}
// 添加页尾
const addFooter = async (pdf: any, currentPage?: any, totalPage?: any) => {const footerDom: any = document.querySelector('#pdfPage-footer')const newFooterDom = footerDom.cloneNode(true)if (currentPage && totalPage) {newFooterDom.querySelector('#footer-page').innerText = currentPagenewFooterDom.querySelector('#footer-total').innerText = totalPage}document.documentElement.append(newFooterDom)const { height: imgFooterHeight, data: footerCanvas } = await toCanvas(newFooterDom)// const imgFooterHeight = 595 * footerHegith / footerWidthawait pdf.addImage(footerCanvas, 'JPEG', 0, A4_HEIGHT - imgFooterHeight, A4_WIDTH, imgFooterHeight)
}
export default htmlToPdfPage

2.页面调用

<template><div class="page"><button @click="exportToPdf">导出 PDF</button><!-- 页眉 --><div class="page-header" id="pdfPage-header" v-if="isExportPdf">......<div class="row-between mt20">......<div v-if="isExportPdf"> 页码 Page: <span id="pdfPage-page">1</span> of <span id="pdfPage-total">5</span></div></div></div><!-- 内容 --><!-- 此案例通过page-one固定了每页高度,动态数据可根据每页高度获取最近dom元素,添加margin-top,避免内容中间截断 --><div class="page-content"  id="pdfPage" v-loading="pageLoading"><div :class="isExportPdf ? 'page-flex page-one' : 'page-flex'"></div><div :class="isExportPdf ? 'page-flex page-one' : 'page-flex'"></div><div><!-- 页尾 --><div class="page-footer" id="pdfPage-footer" v-if="isExportPdf">......<div v-if="isExportPdf"> 页码 Page: <span id="footer-page">1</span> of <span id="footer-total">5</span></div></div></div>
</template><script setup lang="ts">
import { ref, getCurrentInstance, reactive, computed, onMounted, nextTick } from 'vue'
import htmlToPdfPage from '@/utils/htmlToPdfPage'disabledFalg.value = route.query.type === 'view'
const isExportPdf = ref(false) // 是否为导出pdf状态const exportToPdf = async () => {disabledFalg.value = trueisExportPdf.value = trueawait nextTick()setTimeout(async () => {htmlToPdfPage.getPdf('pdf-title').then((res:any) => {disabledFalg.value = falseisExportPdf.value = falseif(res) {// 业务逻辑处理}})}, 100)
}
</script><style lang="scss" scoped>.page{padding: 10px 20px;font-size: 15px;background-color: #ffffff;}.page-header {width: 960px;padding: 20px 50px 0 50px;margin: 0 auto;height: 150px;}.page-content {width: 960px;margin: 0 auto;padding: 0px 50px;font-family: Arial, Helvetica, sans-serif;background-color: #ffffff;}.page-footer {width: 960px;padding: 0px 50px 10px 50px;height: 90px;margin: 0 auto;}.page-one {height: 1118px;}.page-flex {display: flex;flex-direction: column;}

相关文章:

VUE3+TypeScript项目,使用html2Canvas+jspdf生成PDF并实现--分页--页眉--页尾

使用html2CanvasJsPDF生成pdf&#xff0c;并实现分页添加页眉页尾 1.封装方法htmlToPdfPage.ts /**path: src/utils/htmlToPdfPage.tsname: 导出页面为PDF格式 并添加页眉页尾 **/ /*** 封装思路* 1.将页面根据A4大小分隔边距&#xff0c;避免内容被中间截断* 所有元素层级不要…...

windows第十八章 菜单、工具栏、状态栏

文章目录 创建框架窗口菜单菜单的风格通过资源创建菜单菜单的各种使用通过代码创建菜单在鼠标位置右键弹出菜单 CMenu常用函数介绍工具栏方式一&#xff0c;从资源创建工具栏方式二&#xff0c;代码创建 状态栏状态栏基础创建状态栏 创建框架窗口 手动创建一个空项目&#xff…...

C语言中的位域:节省内存的标志位管理技术

位域&#xff08;Bit-field&#xff09; 是 C 语言中的一种特性&#xff0c;允许在结构体&#xff08;struct&#xff09;中定义占用特定位数的成员变量。通过位域&#xff0c;可以更精细地控制内存的使用&#xff0c;尤其是在需要存储多个布尔值或小范围整数时&#xff0c;可以…...

单端信号差分信号

单端信号和差分信号是电路中常见的两种信号传输方式&#xff0c;它们在具体的应用场景和特点上有着明显的区别。下面就来详细说明一下单端信号和差分信号的区别。 首先&#xff0c;单端信号是指信号通过一个信号线传输&#xff0c;通常一个信号线携带一个信号。这种传输方式适…...

数据设计(范式、步骤)

文章目录 数据设计1.数据库设计的三大范式2、数据库设计的具体步骤 数据设计 1.数据库设计的三大范式 关系型数据库的三大范式&#xff0c;指导如何设计一个关系型数据库。 1NF&#xff1a; 关系表的每个字段&#xff0c;都应该是不可再分的&#xff0c;——保证原子性。 字…...

Linux 中查看文件大小方法

目录 方法一&#xff1a;ls -l 输出的第五列方法二&#xff1a;du 命令的输出信息方法三&#xff1a;stat -c %s 的输出 方法一&#xff1a;ls -l 输出的第五列 ls 是列出指定目录下文件列表的命令&#xff0c;通过 -l 选项可以显示文件的属性信息&#xff0c;第五列显示的就是…...

SEO(搜索引擎优化)详解

SEO&#xff08;搜索引擎优化&#xff09;详解 SEO是Search Engine Optimization的缩写&#xff0c;中文称为"搜索引擎优化"。它是指通过一系列技术和方法&#xff0c;提高网站在搜索引擎自然&#xff08;非付费&#xff09;搜索结果中的排名&#xff0c;从而获得更…...

软考-高项,知识点一览十二 质量管理

十二 质量管理 项目质量管理包括把组织的质量政策应用于规划、管理、控制项目和产品质量要求&#xff0c;以满足干系人目标的各个过程。 项目质量管理需要兼顾项目管理与项目可交付成果两个方面&#xff0c;它适用于所有项目&#xff0c;无论项目的可付成果具有何种特性。 管…...

Docker 设置国内镜像源

Windows 和 macOS 用户 1、一般使用Docker Desktop软件&#xff0c;在 Docker Desktop 的图形界面中完成镜像源的更换操作。具体步骤如下&#xff1a; 打开 Docker Desktop 后&#xff0c;在菜单栏依次点击 Settings -> Docker Engine。此时会弹出一个 JSON 编辑框&#xf…...

探秘Transformer系列之(19)----FlashAttention V2 及升级版本

探秘Transformer系列之&#xff08;19&#xff09;----FlashAttention V2 及升级版本 文章目录 探秘Transformer系列之&#xff08;19&#xff09;----FlashAttention V2 及升级版本0x00 概述0x01 FlashAttention V21.1 动机1.2 方案1.2.1 减少冗余计算1.2.2 增加并行1.2.3 调整…...

《白帽子讲 Web 安全》之跨站请求伪造

引言 在数字化时代&#xff0c;网络已深度融入人们生活的方方面面&#xff0c;Web 应用如雨后春笋般蓬勃发展&#xff0c;为人们提供着便捷高效的服务。然而&#xff0c;繁荣的背后却潜藏着诸多安全隐患&#xff0c;跨站请求伪造&#xff08;CSRF&#xff09;便是其中极为隐蔽…...

C++20:make_shared_for_overwrite与make_unique_for_overwrite

文章目录 一、背景与动机二、std::make_shared_for_overwrite2.1 语法与用法2.2 优势 三、std::make_unique_for_overwrite3.1 语法与用法3.2 优势 四、应用场景4.1 高性能计算4.2 大型对象管理4.3 实时系统 五、总结 C20 引入了两个新的标准库函数&#xff1a; std::make_sha…...

北斗导航 | 改进奇偶矢量法的接收机自主完好性监测算法原理,公式,应用,RAIM算法研究综述,matlab代码

改进奇偶矢量法的接收机自主完好性监测算法研究 摘要 接收机自主完好性监测(RAIM)是保障全球导航卫星系统(GNSS)安全性的核心技术。针对传统奇偶矢量法在噪声敏感性、多故障隔离能力上的缺陷,本文提出一种基于加权奇偶空间与动态阈值的改进算法。通过引入观测值权重矩阵重…...

【React】基础版React + Redux实现教程,自定义redux库,Redux Toolkit教程

本项目是一个在react中&#xff0c;使用 redux 管理状态的基础版实现教程&#xff0c;用简单的案例练习redux的使用&#xff0c;旨在帮助学习 redux 的状态管理机制&#xff0c;包括 store、action、reducer、dispatch 等核心概念。 项目地址&#xff1a;https://github.com/Yv…...

onlyoffice实现office文件在线编辑保存

一、简介 onlyoffice是开源的在线文档编辑软件,支持主流的office格式,可实现文档在线编辑保存,多人协作编辑等场景,是目前我用过的功能最完善且强大的在线office编辑软件; 二、安装onlyoffice 这里仅介绍docker安装 简单运行查看sudo docker run -i -t -d -p 80:80 --…...

Transformer革命:人工智能如何突破语言理解的边界

Transformer革命&#xff1a;人工智能如何突破语言理解的边界&#xff1f; 当你在手机输入法中打出"苹果"时&#xff0c;系统是否知道你要输入水果还是手机品牌&#xff1f;这个看似简单的选择&#xff0c;背后隐藏着自然语言处理领域二十年来最深刻的变革。2017年谷…...

禅道品牌全面战略升级:开创项目管理国产化替代新格局

2025年&#xff0c;禅道软件完成企业品牌战略深度升级。此次升级&#xff0c;从产品力、服务力到生态圈构建等方面进行了全面优化&#xff0c;以更智慧的解决方案、更开放的生态布局&#xff0c;更安全的国产化解决方案&#xff0c;助力企业实现从“工具应用”到“价值创造”的…...

软件项目管理课程之第4讲:软件需求管理

讲授内容 项目案例 软件需求管理的基本概念 软件需求开发 软件需求管理 项目案例 案例背景&#xff1a;小王作为软件项目负责人&#xff0c;带领团队开展需求调查工作&#xff0c;但在需求分析和后续开发过程中出现了一系列问题。 问题表现&#xff1a; 项目规模庞大&…...

java基础知识和语法

1.类的信息加载完成后&#xff0c;会自动调用静态代码块&#xff0c;可以完成静态属性的初始化功能 对象准备创建时&#xff0c;也会自动调用代码块&#xff0c;但不是静态的&#xff1b; public class java_3_24 {public static void main(String[] args) {new User08();}} …...

横扫SQL面试——事件流处理(峰值统计)问题

横扫SQL面试 &#x1f4cc; 事件流处理&#xff08;峰值统计&#xff09;问题 “会议室预定冲突怎么查&#xff1f; &#x1f50d; 服务器瞬时负载如何算&#xff1f;&#x1f3a2; 健身房的‘人挤人’高峰究竟出现在几点&#xff1f;&#x1f3c3;‍♂️” 这些看似毫不相干…...

如何降低频谱分析仪的底噪

测量微小信号的时候&#xff0c;底噪可能会淹没有用的信号&#xff1a;&#xff08;如下图&#xff0c;底噪为-60dB&#xff09; 如何降低底噪&#xff1a; 1.分辨率带宽RBW设置小一点&#xff0c;可以减小信号的底噪 2.减小衰减器&#xff08;频谱分析仪底噪的功率随着输入衰…...

C语言基础知识09---文件操作

目录 文件操作 1.1 文件操作 1.2 文件操作的数据传输形式 1.3 文件操作的分类 1.4 文件存储格式 1.5 文件流指针 1.6 函数名&#xff1a;fopen() 1.7 函数名&#xff1a;fclose() 1.8 函数名&#xff1a;fprintf() 1.9 函数名&#xff1a;fscanf() 1.10 函数名&…...

GRS认证的主要步骤是什么?

GRS认证的具体步骤&#xff0c;是一个严谨而系统的过程&#xff0c;旨在确保产品从原料来源到最终消费的每一个环节都符合全球回收标准&#xff08;Global Recycle Standard&#xff0c;简称GRS&#xff09;的严格要求。 首先&#xff0c;企业需要向GRS认证机构提交申请&#…...

探究 CSS 如何在HTML中工作

2025/3/28 向全栈工程师迈进&#xff01; 一、CSS的作用 简单一句话——美化网页 <p>Lets use:<span>Cascading</span><span>Style</span><span>Sheets</span> </p> 对于如上代码来说&#xff0c;其显示效果如下&#xff1…...

软件工程面试题(七)

1、DAO设计模式及DELEGATE模式 DAO(Data Access Object)模式实际上是两个模式的组合,即Data Accessor 模式和 Active Domain Object 模式,其中 Data Accessor 模式实现了数据访问和业务逻辑的分离,而Active Domain Object 模式实现了业务数据的对象化封装,一般我们将这两…...

AfxMessageBox()如何显示string字符串

书籍&#xff1a;《Visual C 2017从入门到精通》的2.7 字符串 环境&#xff1a;visual studio 2022 内容&#xff1a;几个字符串类型->&#xff08;将单字节char*转换为宽字节wchar_t *&#xff09; 在 MFC 中&#xff0c;AfxMessageBox 默认支持显示 CString 或宽字符字符…...

基于 kubekey -实现懒人一键部署K8S集群

基于 kubekey -实现懒人一键部署K8S集群 操作步骤 官网&#xff1a; https://kubesphere.io/zh/ 一、执行以下命令快速创建一个 Kubernetes 集群。 Master节点 如果您访问 GitHub/Googleapis 受限&#xff0c;请登录 Linux 主机&#xff0c;执行以下命令设置下载区域。 [roott…...

19款超级华丽动画的图片轮播HTML5+CSS3模板源码

大家好&#xff0c;我是分享源码和设计思想的程序媛&#xff0c; 今天给大家分享一个 19款超级华丽动画的图片轮播HTML5CSS3模板源码。 纯CSS3HTML5代码实现&#xff0c;没有任何其它杂乱的框架东西。 图片演示 1. 3D立方体轮播效果 2. 视差滚动轮播效果 3. 卡片堆叠轮播效果 4…...

第十六:redis 的 帖子投票要点

ZADD orders 100 order1 ZADD orders 200 order2 ZADD orders 300 order3 zadd myzset 100 nameorder // 添加一个有序集合 其中存储了用户的订单信息&#xff0c;每个订单用一个唯一的 ID 表示 ZSCORE myzset nameorder  // myzset 是key  nameorder 是成员&#xff…...

51c深度学习~合集4

我自己的原文哦~ https://blog.51cto.com/whaosoft/12327892 #robustlearn 本文提出了「鲁棒关键微调」&#xff0c;通过「微调」对抗训练模型的「非鲁棒关键性模块」&#xff0c;充分利用其冗余能力提升泛化性。 对抗训练&#xff08;Adversarail Training&#xff09;…...

解决Vmware 运行虚拟机Ubuntu22.04卡顿、终端打字延迟问题

亲测可用 打开虚拟机设置&#xff0c;关闭加速3D图形 &#xff08;应该是显卡驱动的问题&#xff0c;不知道那个版本的驱动不会出现这个问题&#xff0c;所以干脆把加速关了&#xff09;...

Arduino硬件控制开发基础资料

Arduino 的程序可以划分为三个主要部分&#xff1a;结构、变量&#xff08;变量与常量&#xff09;、函数。 结构部分 一、结构 1.1 setup() 1.2 loop() 二、结构控制 2.1 if 2.2 if...else 2.3 for 2.4 switch case 2.5 while 2.6 do... while 2.7 break 2.8 cont…...

地图项目入手学习

如果你目前对自己的地图项目实现原理不太了解&#xff0c;周末可以通过以下方法进行高效学习&#xff1a; ⸻ 第一步&#xff1a;梳理项目相关代码&#xff08;3 小时&#xff09; 目标&#xff1a;先大致了解你的地图项目代码&#xff0c;找到核心实现逻辑。 具体做法&…...

OpenCV图像处理:边缘检测

文章目录 前言一、什么是边缘检测&#xff1f;二、算法分类1、Sobel算子2、Scharr算子3、Canny边缘检测3.1 Canny检测的优点3.2 Canny 边缘检测分为 4 个部分3.2.1 、图像降噪3.2.2 、梯度计算3.2.3 、非极大值抑制3.2.4 、双阈值边界跟踪 4、算法比较 三、代码实现总结 前言 …...

性能测试~

1.什么是性能测试 1.什么是性能 就像这两个车一样,虽然都是代步工具,构造都是一样的,但是路虎的发动机要比捷达好.路虎的百米加速却是比捷达快的,我们就知道路虎的性能要比捷达好 . 那么什么是软件的性能呢?我们分析一下 2.常见的性能测试指标 2.1并发数 并发数是指在同一…...

pagehelper 分页插件使用说明

pom.xml&#xff1a;pageHelper坐标 <!--pageHelper坐标--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.6</version></dependency> 分…...

使用crypto-js进行DES加/解密

crypto-js 官方网站&#xff1a;https://github.com/brix/crypto-js 中文参考教程&#xff1a;前端加密JS库–CryptoJS 使用指南 在线加解密网站&#xff1a;https://www.mklab.cn/utils/des 首先要安装crypto-js库&#xff0c;根据自己使用的方式按照官方网站步骤进行即可。 …...

【图片识别Excel表格】批量将图片上的区域文字识别后保存为表格,基于WPF和阿里云的项目实战总结

一、项目背景 在信息处理和文档管理中,经常会遇到需要从大量图片中提取文字并进行整理的场景。例如,财务部门需要从大量报销票据中提取金额、日期等信息;法务部门需要从合同文档中提取关键条款;教育行业需要从试卷中提取学生的答题内容等。传统的手工处理方式不仅耗时长、…...

在 i.MX8MP 上用 C++ 调用豆包 AI 大模型实现图像问答

本文介绍了如何在 i.MX8MP 嵌入式平台上使用 C 调用豆包 AI 大模型&#xff08;Doubao-vision-pro-32k&#xff09;进行图像问答。我们将详细讲解代码实现的各个步骤&#xff0c;包括文件读取、Base64 编码、构造 JSON 请求体、使用 libcurl 进行 HTTP POST 请求以及解析响应数…...

uni-app自动升级功能

效果图 一、VUE login.vue <template><view><view class"uni-common-mt"><view class"uni-flex uni-column"><view class"flex-item flex-item-V"><view class"logo"><image src"/st…...

线性回归 + 基础优化算法

线性回归 线性回归是机器学习最基础的模型&#xff0c;也是理解后续所有深度学习的基础。 线性模型可以看做是单层神经网络。 上述有个0.5是在求导的时候可以很方便的将2消去。 实际上&#xff0c;这里的数据样本受限很大&#xff0c;比如地球上房子就那么多&#xff0c;肯…...

MyBatis分页插件混用问题解析:IPage与PageHelper的冲突与解决

一、背景 在同时使用 MyBatis-Plus 的 IPage 分页 和 PageHelper 时&#xff0c;开发者可能会遇到以下两类问题&#xff1a; 分页结果异常&#xff1a;IPage 查询的 total 总条数返回 0&#xff0c;但实际数据正常。依赖冲突报错&#xff1a;启动时报错 Column.withColumnNam…...

4.Socket类、InetAddr类、Epoll类实现模块化

目录 1. InetAddr类 类定义 代码说明 类实现 2.Socket类 类定义 类实现 3. Epoll类 类定义 构造与析构函数 方法实现 类实现 4. 使用模块化设计 示例使用&#xff08;main.cpp) 5. 运行程序 随着程序复杂度的增加&#xff0c;单一的面向过程的代码会变得难以理…...

19 python 模块

在办公室的日常工作中&#xff0c;我们常常会用到各种各样的工具&#xff0c;像计算器用于计算数据、打印机用来打印文件、订书机将纸张装订成册等。这些工具会被反复使用&#xff0c;而且不同的工具具有不同的功能。 一、模块的定义 在 Python 里&#xff0c;模块就如同一个…...

医疗智能体通信整合-大模型训练中沟通优化策略研究

一、引言:医疗模型训练的沟通困境 1.1 医疗 AI 发展背景 在数智化浪潮的推动下,医疗 AI 正以前所未有的速度融入现代医疗体系。从智能影像诊断助力医生精准识别病灶,到基于大数据分析的个性化药物研发,医疗 AI 在提升医疗效率、改善医疗质量方面展现出巨大潜力。据相关数据…...

LearnOpenGL-笔记-其六

今天我们来聊一些更深入的东西&#xff1a; Depth Testing 在之前的学习过程中&#xff0c;我们有接触过深度缓冲&#xff0c;彼时的深度缓冲的意义就是可以让我们体现出深度的差异从而达到立体的效果&#xff0c;而现在我们将在深度缓冲的基础进一步扩展&#xff0c;进行深度…...

【商城实战(91)】安全审计与日志管理:为电商平台筑牢安全防线

【商城实战】专栏重磅来袭&#xff01;这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建&#xff0c;运用 uniapp、Element Plus、SpringBoot 搭建商城框架&#xff0c;到用户、商品、订单等核心模块开发&#xff0c;再到性能优化、安全加固、多端适配&#xf…...

Windows 10更新失败解决方法

在我们使用 Windows 时的时候&#xff0c;很多时候遇到系统更新 重启之后却一直提示“我们无法完成更新&#xff0c;正在撤销更改” 这种情况非常烦人&#xff0c;但其实可以通过修改文件的方法解决&#xff0c;并且正常更新到最新版操作系统 01修改注册表 管理员身份运行注…...

【安当产品应用案例100集】042-基于安当KADP实现机密文件安全流转

一、客户需求 某集团公司客户&#xff0c;在系统业务流中&#xff0c;存在大量的内部文件流转的需求。内部业务文件有不同的安全密级&#xff0c;最初在文件流转时&#xff0c;公司内部规定点对点的文件传输&#xff0c;要使用加密工具加密后再发给需要的一方。这种方式虽然能…...

【网络】Socket套接字

目录 一、端口号 二、初识TCP/UDP协议 三、网络字节序 3.1 概念 3.2 常用API 四、Socket套接字 4.1 概念 4.2 常用API &#xff08;1&#xff09;socket &#xff08;2&#xff09;bind sockaddr结构 &#xff08;3&#xff09;listen &#xff08;4&#xff09;a…...