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

vue3: pdf.js 3.4.120 using javascript

npm install pdfjs-dist@3.4.120

 项目结构:

pdfjsViewer.vue

<template><div><div v-if="loading" class="flex justify-center items-center py-8"><div class="animate-spin rounded-full h-12 w-12 border-b-2 border-blue-500"></div></div><div v-else><div class="flex flex-col md:flex-row gap-4 mb-4"><button @click="loadPreviousPage" :disabled="currentPage === 1" class="px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600"><i class="fa fa-arrow-left mr-1"></i> 上一页</button><button @click="loadFirstPage" :disabled="currentPage === 1" class="px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600"><i class="fa fa-fast-backward mr-1"></i> 第一页</button><span class="text-lg self-center">第 {{ currentPage }} 页,共 {{ totalPages }} 页</span><button @click="loadNextPage" :disabled="currentPage === totalPages" class="px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600">下一页 <i class="fa fa-arrow-right ml-1"></i></button><button @click="loadLastPage" :disabled="currentPage === totalPages" class="px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600">最后一页 <i class="fa fa-fast-forward ml-1"></i></button></div></div><div class="flex items-center mb-4"><span class="mr-2">缩放:</span><button @click="zoomOut" class="px-2 py-1 bg-gray-200 rounded hover:bg-gray-300"><i class="fa fa-search-minus"></i></button><span class="mx-2">{{ Math.round(scale * 100) }}%</span><button @click="zoomIn" class="px-2 py-1 bg-gray-200 rounded hover:bg-gray-300"><i class="fa fa-search-plus"></i></button><select v-model="scaleValue" @change="changeScale" class="ml-4 px-2 py-1 border rounded"><option value="0.5">50%</option><option value="0.75">75%</option><option value="1">100%</option><option value="1.25">125%</option><option value="1.5">150%</option><option value="2">200%</option></select></div>  <div class="relative w-full bg-gray-100" ref="pdfContainer"><canvas ref="pdfCanvas" class="border-2 border-gray-300 rounded shadow-lg w-full"></canvas></div></div>
</template><script>
// 调整导入路径以适应3.4.120版本
import * as pdfjsLib from 'pdfjs-dist/build/pdf';
import pdfjsWorker from 'pdfjs-dist/build/pdf.worker';// 设置worker路径
pdfjsLib.GlobalWorkerOptions.workerSrc = '/node_modules/pdfjs-dist/build/pdf.worker.js';export default {name: 'PdfViewer',props: {pdfPath: {type: [String, Uint8Array],required: true}},data() {return {//pdfDoc: null,currentPage: 1,totalPages: 0,scale: 1,scaleValue: '1',canvas: null,ctx: null,renderTask: null,loading: true,error: null};},watch: {pdfPath: {immediate: true,handler(newVal) {this.loadPDF(newVal);}}},mounted() {this.$nextTick(() => {this.canvas = this.$refs.pdfCanvas;this.ctx = this.canvas.getContext('2d');});},methods: {async loadPDF(path) {this.loading = true;this.error = null;this.pdfDoc= null;try {await this.$nextTick();if (!this.$refs.pdfCanvas) {console.error('Canvas元素未找到');this.error = 'Canvas元素未找到';return;}this.canvas = this.$refs.pdfCanvas;this.ctx = this.canvas.getContext('2d');if (this.renderTask) {//this.renderTask.cancel();}this.currentPage = 1;const loadingTask = pdfjsLib.getDocument({url: path,disableFontFace: false,cMapUrl: '/node_modules/pdfjs-dist/cmaps/',cMapPacked: true});this.pdfDoc = await loadingTask.promise;this.totalPages = this.pdfDoc.numPages;console.log('PDF加载成功,总页数:', this.totalPages);await this.renderPage(this.currentPage);this.$emit('pageChanged', this.currentPage, this.totalPages);} catch (error) {console.error('加载PDF时出错:', error);this.error = error.message;alert('加载PDF失败: ' + error.message);} finally {this.loading = false;}},async renderPage(num) {if (!this.pdfDoc || !this.canvas || !this.ctx) {console.error('PDF文档或Canvas未初始化');return;}try {await this.$nextTick();console.log("renderPage:");console.log(this.pdfDoc);console.log('渲染第', num, '页,缩放比例:', this.scale);if (this.renderTask) {//this.renderTask.cancel();}const page = await this.pdfDoc.getPage(num);console.log("pp",page);const viewport = page.getViewport({ scale: this.scale });// 设置canvas尺寸this.canvas.height = viewport.height;this.canvas.width = viewport.width;// 清除canvasthis.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);console.log('Canvas尺寸设置为:', this.canvas.width, 'x', this.canvas.height);const renderContext = {canvasContext: this.ctx,viewport: viewport};console.log('开始渲染页面...');this.renderTask = page.render(renderContext);await this.renderTask.promise;console.log('页面渲染成功');this.$emit('pageChanged', num, this.totalPages);} catch (error) {if (error.name !== 'RenderingCancelledException') {console.error('渲染页面时出错:', error);this.error = error.message;}}},async loadFirstPage() {if (this.currentPage !== 1) {this.currentPage = 1;console.log("Page:");console.log(this.pdfDoc);await this.renderPage(this.currentPage);}},async loadPreviousPage() {if (this.currentPage > 1) {this.currentPage--;console.log("Page:");console.log(this.pdfDoc);await this.renderPage(this.currentPage);}},async loadNextPage() {if (this.currentPage < this.totalPages) {this.currentPage++;console.log("Page:");console.log(this.pdfDoc);await this.renderPage(this.currentPage);}},async loadLastPage() {if (this.currentPage !== this.totalPages) {this.currentPage = this.totalPages;console.log("Page:");console.log(this.pdfDoc);await this.renderPage(this.currentPage);}},zoomIn() {this.scale += 0.25;this.scaleValue = this.scale.toString();this.renderPage(this.currentPage);},zoomOut() {if (this.scale > 0.5) {this.scale -= 0.25;this.scaleValue = this.scale.toString();this.renderPage(this.currentPage);}},changeScale() {this.scale = parseFloat(this.scaleValue);this.renderPage(this.currentPage);}}
};
</script><style scoped>
.pdf-container {overflow: auto;min-height: 500px;
}
canvas {max-width: 100%;display: block;
}
button:disabled {opacity: 0.5;cursor: not-allowed;
}
</style>

dupdf.vue

<!--* ......................................&&.........................* ....................................&&&..........................* .................................&&&&............................* ...............................&&&&..............................* .............................&&&&&&..............................* ...........................&&&&&&....&&&..&&&&&&&&&&&&&&&........* ..................&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&..............* ................&...&&&&&&&&&&&&&&&&&&&&&&&&&&&&.................* .......................&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&.........* ...................&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...............* ..................&&&   &&&&&&&&&&&&&&&&&&&&&&&&&&&&&............* ...............&&&&&@  &&&&&&&&&&..&&&&&&&&&&&&&&&&&&&...........* ..............&&&&&&&&&&&&&&&.&&....&&&&&&&&&&&&&..&&&&&.........* ..........&&&&&&&&&&&&&&&&&&...&.....&&&&&&&&&&&&&...&&&&........* ........&&&&&&&&&&&&&&&&&&&.........&&&&&&&&&&&&&&&....&&&.......* .......&&&&&&&&.....................&&&&&&&&&&&&&&&&.....&&......* ........&&&&&.....................&&&&&&&&&&&&&&&&&&.............* ..........&...................&&&&&&&&&&&&&&&&&&&&&&&............* ................&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&............* ..................&&&&&&&&&&&&&&&&&&&&&&&&&&&&..&&&&&............* ..............&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&....&&&&&............* ...........&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&......&&&&............* .........&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&.........&&&&............* .......&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...........&&&&............* ......&&&&&&&&&&&&&&&&&&&...&&&&&&...............&&&.............* .....&&&&&&&&&&&&&&&&............................&&..............* ....&&&&&&&&&&&&&&&.................&&...........................* ...&&&&&&&&&&&&&&&.....................&&&&......................* ...&&&&&&&&&&.&&&........................&&&&&...................* ..&&&&&&&&&&&..&&..........................&&&&&&&...............* ..&&&&&&&&&&&&...&............&&&.....&&&&...&&&&&&&.............* ..&&&&&&&&&&&&&.................&&&.....&&&&&&&&&&&&&&...........* ..&&&&&&&&&&&&&&&&..............&&&&&&&&&&&&&&&&&&&&&&&&.........* ..&&.&&&&&&&&&&&&&&&&&.........&&&&&&&&&&&&&&&&&&&&&&&&&&&.......* ...&&..&&&&&&&&&&&&.........&&&&&&&&&&&&&&&&...&&&&&&&&&&&&......* ....&..&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...........&&&&&&&&.....* .......&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&..............&&&&&&&....* .......&&&&&.&&&&&&&&&&&&&&&&&&..&&&&&&&&...&..........&&&&&&....* ........&&&.....&&&&&&&&&&&&&.....&&&&&&&&&&...........&..&&&&...* .......&&&........&&&.&&&&&&&&&.....&&&&&.................&&&&...* .......&&&...............&&&&&&&.......&&&&&&&&............&&&...* ........&&...................&&&&&&.........................&&&..* .........&.....................&&&&........................&&....* ...............................&&&.......................&&......* ................................&&......................&&.......* .................................&&..............................* ..................................&..............................** @Author: geovindu* @Date: 2025-05-12 19:12:10* @LastEditors: geovindu* @LastEditTime: 2025-05-12 19:17:45* @FilePath: \vue\vuejs\src\components\dupdf.vue* @Description: geovindu* @lib,packpage:** @IDE: vscode* @jslib: node 20 vue.js 3.0* @OS: windows10* @database: mysql 8.0  sql server 2019 postgreSQL 16* Copyright (c) geovindu 2025 by geovindu@163.com, All Rights Reserved.--><template><div class="container mx-auto p-4"><h1 class="text-2xl font-bold mb-4">PDF查看器</h1><PdfViewer :pdfPath="pdfPath" @pageChanged="handlePageChanged" /><div class="mt-4"><input type="file" @change="handleFileSelect" accept=".pdf" class="border p-2 rounded"></div></div>
</template><script>
import PdfViewer from './pdfjsViewer.vue';export default {name: 'App',components: {PdfViewer},data() {return {pdfPath: './09.pdf'};},methods: {handlePageChanged(currentPage, totalPages) {console.log(`当前页码: ${currentPage}, 总页数: ${totalPages}`);// 可以在这里更新父组件状态或执行其他操作},async handleFileSelect(e) {const file = e.target.files[0];if (file) {const blob = new Blob([file], { type: file.type });this.pdfPath = URL.createObjectURL(blob);}}}
};
</script>

App.vue

<!--**   ┏┓   ┏┓+ +*  ┏┛┻━━━┛┻┓ + +*  ┃       ┃  *  ┃   ━   ┃ ++ + + +*  ████━████ ┃+*  ┃       ┃ +*  ┃   ┻   ┃*  ┃       ┃ + +*  ┗━┓   ┏━┛*    ┃   ┃           *    ┃   ┃ + + + +*    ┃   ┃*    ┃   ┃ +  神兽保佑*    ┃   ┃    代码无bug  *    ┃   ┃  +         *    ┃    ┗━━━┓ + +*    ┃        ┣┓*    ┃        ┏┛*    ┗┓┓┏━┳┓┏┛ + + + +*     ┃┫┫ ┃┫┫*     ┗┻┛ ┗┻┛+ + + +*** @Author: geovindu* @Date: 2024-08-05 08:57:12* @LastEditors: geovindu* @LastEditTime: 2024-10-16 09:20:45* @FilePath: \vue\vuejs\src\App.vue* @Description: geovindu* @lib,packpage:** @IDE: vscode* @jslib: node 20 vue.js 3.0* @OS: windows10* @database: mysql 8.0  sql server 2019 postgreSQL 16* Copyright (c) geovindu 2024 by geovindu@163.com, All Rights Reserved.--><script setup>
import { RouterLink, RouterView } from 'vue-router'
import HelloWorld from './components/HelloWorld.vue'
</script><template><header><img alt="Vue logo" class="logo" src="@/assets/logo.svg" width="125" height="125" /><div class="wrapper"><HelloWorld msg="You did it!" /><nav><RouterLink to="/">Home</RouterLink><RouterLink to="/about">About</RouterLink><RouterLink to="/doc">Word</RouterLink><RouterLink to="/excel">Excel</RouterLink><RouterLink to="/pdf">Pdf</RouterLink><RouterLink to="/pdfjs">Pdfjs</RouterLink><RouterLink to="/dupdfjs">duPdfjs</RouterLink></nav></div></header><RouterView />
</template><style scoped>
header {line-height: 1.5;max-height: 100vh;
}.logo {display: block;margin: 0 auto 2rem;
}nav {width: 100%;font-size: 12px;text-align: center;margin-top: 2rem;
}nav a.router-link-exact-active {color: var(--color-text);
}nav a.router-link-exact-active:hover {background-color: transparent;
}nav a {display: inline-block;padding: 0 1rem;border-left: 1px solid var(--color-border);
}nav a:first-of-type {border: 0;
}@media (min-width: 1024px) {header {display: flex;place-items: center;padding-right: calc(var(--section-gap) / 2);}.logo {margin: 0 2rem 0 0;}header .wrapper {display: flex;place-items: flex-start;flex-wrap: wrap;}nav {text-align: left;margin-left: -1rem;font-size: 1rem;padding: 1rem 0;margin-top: 1rem;}
}
</style>

word,excel,ppt 在线预览暂不示例

相关文章:

vue3: pdf.js 3.4.120 using javascript

npm install pdfjs-dist3.4.120 项目结构&#xff1a; pdfjsViewer.vue <template><div><div v-if"loading" class"flex justify-center items-center py-8"><div class"animate-spin rounded-full h-12 w-12 border-b-2 borde…...

编译原理AST以Babel为例进行解读、Webpack中自定义loader与plugin

AST树详解 编译原理 主要研究如何将高级编程语言的源代码转换为机器能理解的目标代码&#xff08;通常是二进制代码或中间代码&#xff09;。编译器的底层实现通常包含多个阶段&#xff0c;包括词法分析、语法分析、语义分析和代码生成。 一、AST的核心概念与作用 AST&#…...

牛客周赛 Round 92

目录 A-小红的签到题 代码 B-小红的模拟 代码 C-小红的方神题 代码 D-小红的数学题 代码 无注释版 有注释版 E-小红的ds题 代码 无注释版 有注释版 A-小红的签到题 代码 #include<bits/stdc.h> using namespace std; int main(){int n;cin>>n;cha…...

面试题:C++虚函数可以是内联函数吗?

目录 1.引言 2.示例 3.总结 1.引言 为什么C的虚函数和内联函数这两个看似矛盾的特性能否共存&#xff1f;这个问题实际上触及了C编译期优化与运行时多态性之间的微妙平衡。我发现这个问题不仅是面试中的常见陷阱&#xff0c;更是理解C深层机制很好的一个点。 虚函数可以被声…...

蚁群算法赋能生鲜配送:MATLAB 实现多约束路径优化

在生鲜农产品配送中&#xff0c;如何平衡运输效率与成本控制始终是行业难题。本文聚焦多目标路径优化&#xff0c;通过 MATLAB 实现蚁群算法&#xff0c;解决包含载重限制、时间窗约束、冷藏货损成本的复杂配送问题。代码完整复现了从数据生成到路径优化的全流程&#xff0c;助…...

前苹果首席设计官回顾了其在苹果的设计生涯、公司文化、标志性产品的背后故事

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

《基于 Kubernetes 的 WordPress 高可用部署实践:从 MariaDB 到 Nginx 反向代理》

手把手教你用 Kubernetes 部署高可用 WordPress 博客 本实验通过 Kubernetes 容器编排平台&#xff0c;完整部署了一个高可用的 WordPress 网站架构&#xff0c;包含 MariaDB 数据库、WordPress 应用和 Nginx 反向代理三大核心组件。实验涵盖了从基础环境准备到最终服务暴露的…...

文件上传总结

攻击与绕过方式 一、条件竞争 攻击原理&#xff1a;在上传文件的同时利用代码逻辑中的时序问题&#xff08;如 unlink() 删除操作&#xff09;触发条件竞争&#xff0c;从而实现上传恶意文件并绕过限制。 示例测试源码&#xff1a; 以下为测试文件上传功能的 PHP 源码&#xff…...

在文档里如何引用在线SVG甘特图

在文档里如何引用在线SVG甘特图 介绍 本文将详细介绍如何快速创建一个功能强大的在线甘特图&#xff0c;并将其嵌入到其他文档&#xff08;如 Notion、Wiki、Qiita、GitHub、Obsidian、Email 等&#xff09;中。只要目标工具支持引用网络图片&#xff0c;你就可以轻松实现这一…...

Spring AI 与 Groq 的深度集成:解锁高效 AI 推理新体验

Spring AI 与 Groq 的深度集成&#xff1a;解锁高效 AI 推理新体验 前言 在人工智能飞速发展的当下&#xff0c;AI 推理的效率和性能成为开发者关注的焦点。Groq 作为一款基于 LPU™ 的超快速 AI 推理引擎&#xff0c;凭借其强大的性能&#xff0c;能够支持各类 AI 模型&…...

101alpha---第10

rank(((0 < ts_arg_min(ts_delta(close, 1), 4)) ? ts_delta(close, 1) : ((ts_arg_max(ts_delta(close, 1), 4) < 0) ? ts_delta(close, 1) : (-1 * ts_delta(close, 1))))) alpha 那么我们来看具体含义 吧 rank(((0 < ts_arg_min(ts_delta(close, 1), 4)) ? …...

vim中的查找

在 Vim 中&#xff0c;使用 n 键可以按正向&#xff08;向下&#xff09;继续查找下一个匹配项。若要反向&#xff08;向上&#xff09;查找&#xff0c;可以使用以下方法&#xff1a; 1. 使用 N 键反向查找 在查找命令&#xff08;如 /keyword&#xff09;后&#xff0c;按下…...

什么是IP专线?企业数字化转型的关键网络基础设施

为什么企业需要IP专线&#xff1f; 在当今数字化浪潮席卷全球的背景下&#xff0c;企业网络需求正经历着前所未有的变革。传统网络架构已难以满足现代企业对高效、安全、灵活网络服务的需求&#xff0c;IP专线正是在这一背景下应运而生的关键网络解决方案。 专线服务本质上是…...

Linux环境基础开发工具的使用(yum、vim、gcc、g++、gdb、make/Makefile)

目录 Linux软件包管理器 - yum Linux下载软件的方式 认识yum 查找软件包 安装软件包 如何实现本地机器和云服务器之间的文件互传 卸载软件 Linux编辑器 - vim vim的基本概念 vim下各模式的切换 vim命令模式各命令汇总 vim底行模式各命令汇总 Linux编译器 - gcc/g …...

5.11 - 5.12 JDBC+Mybatis+StringBoot项目配置文件

JDBC&#xff1a; 预编译SQL优点&#xff1a;安全&#xff0c;性能更高。 在cmd里面输入java-jar就可以运行jar包。 Mybatis&#xff1a; 持久层框架。用于简化JDBC的开发。 数据库连接池里面放置的是一个一个Connection连接对象。&#xff08;连接池中的连接可以复用&#…...

判断一个数组有没有重复值

要判断一个数组是否包含重复值&#xff0c;你可以使用多种方法。以下是一些常用的方法&#xff1a; 方法 1&#xff1a;使用 Set Set 是一种集合数据结构&#xff0c;它只存储唯一的值。因此&#xff0c;你可以将数组转换为 Set&#xff0c;然后比较 Set 的大小与数组的长度。…...

51c大模型~合集127

我自己的原文哦~ https://blog.51cto.com/whaosoft/13905076 #Executor-Workers架构 图解Vllm V1系列2 本文详细介绍了vllm v1的Executor-Workers架构&#xff0c;包括Executor的四种类型&#xff08;mp、ray、uni、external_launcher&#xff09;及其适用场景&#xff…...

Spring急速入门

Spring 是 企业级开发的一站式框架&#xff0c;核心是 IOC&#xff08;控制反转&#xff09; 和 AOP&#xff08;面向切面编程&#xff09; 一、Spring 核心&#xff1a;IOC 理论 1. 什么是 IOC&#xff1f; IOC&#xff08;Inversion of Control&#xff0c;控制反转&…...

#在 CentOS 7 中手动编译安装软件操作及原理

在 CentOS 7 中&#xff0c;手动编译安装软件&#xff08;即从源代码编译安装&#xff09;是一种高度灵活的方式&#xff0c;适用于需要定制化软件功能、优化性能或安装官方仓库未提供的软件版本的场景。以下是针对手动编译安装的详细说明&#xff0c;包括原理、步骤、注意事项…...

【Kubernetes】初识基础理论(第一篇)

前言 单机容器编排&#xff1a; docker-compose 容器集群编排&#xff1a; docker swarm、mesosmarathon、kubernetes 应用编排&#xff1a; ansible 一、Kubernetes概述 Kubernetes 是一个可移植的、可扩展的开源平台&#xff0c;用于管理容器化的…...

配置集群(yarn)

在配置 YARN 集群前&#xff0c;要先完成以下准备工作&#xff1a; 集群环境规划&#xff1a;明确各节点的角色&#xff0c;如 ResourceManager、NodeManager 等。网络环境搭建&#xff1a;保证各个节点之间能够通过网络互通。时间同步设置&#xff1a;安装 NTP 服务&#xff0…...

按钮导航组件 | 纯血鸿蒙组件库AUI

摘要&#xff1a; 按钮导航组件(A_ButtonNav)&#xff1a;可设置导航数据(含文本及路由)&#xff0c;可设置按钮颜色、导航标题及导航子标题。 一、组件调用方式 1.1.极简调用&#xff1a; 用 A_ButtonNav 调用“按钮导航组件”&#xff0c;只需要给属性 data &#xff08;导…...

自适应主从复制模拟器的构建与研究

自适应主从复制模拟器的构建与研究 摘要: 本文旨在构建一个自适应主从复制模拟器,深入研究主从复制原理及优化方法。从研究者视角出发,详细阐述模拟器的设计、实现与实验过程,通过表格、图表及代码等辅助手段,逐步探讨如何在不同网络条件和负载下,自动调整主从复制参数和…...

015枚举之滑动窗口——算法备赛

滑动窗口 最大子数组和 题目描述 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 原题链接 思路分析 见代码注解 代码 int maxSubArray(vector<int>& num…...

【Dv3Admin】工具视图配置文件解析

在开发后台管理系统时,处理复杂的 CRUD 操作是常见的需求。Django Rest Framework(DRF)通过 ModelViewSet 提供了基础的增删改查功能,但在实际应用中,往往需要扩展更多的功能,如批量操作、权限控制、查询优化等。dvadmin/utils/viewset.py 模块通过继承并扩展 ModelViewS…...

在MyBatis Plus里处理LocalDateTime类型

在MyBatis Plus里处理LocalDateTime类型 在MyBatis Plus里处理LocalDateTime类型时&#xff0c;你要确保数据库字段和Java实体类属性之间的类型映射是正确的。下面为你介绍处理这种情况的方法&#xff1a; 1. 数据库字段类型对应设置 要保证数据库字段类型和LocalDateTime相…...

编程技能:字符串函数03,strncpy

专栏导航 本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏&#xff0c;故划分为两个专栏导航。读者可以自行选择前往哪个专栏。 &#xff08;一&#xff09;WIn32 专栏导航 上一篇&#xff1a;编程技能&#xff1a;字符串函数02&#xff0c;strcpy 回到目录…...

edge设置位IE模式打开网页

打开Edge浏览器->在浏览器工具栏右键->自定义工具栏->外观->选择要在工具栏上显示的按钮->找到“Internet Explorer 模式”按钮->开启,将其添加到工具栏中...

代码随想录训练营第二十二天| 101.对称二叉树 100.相同的树

101.对称二叉树&#xff1a; 文档讲解&#xff1a;代码随想录|101.对称二叉树 视频讲解&#xff1a;新学期要从学习二叉树开始&#xff01; | LeetCode&#xff1a;101. 对称二叉树_哔哩哔哩_bilibili 状态&#xff1a;已做出 思路&#xff1a; 这道题目我初始做的时候想着使用…...

nvm管理node版本

To manage Node.js versions on Windows, I recommend using nvm-windows (Node Version Manager for Windows). Here’s how we can handle this: First, let’s install nvm-windows. I’ll propose a command to check if it’s already installed: nvm versionGreat! I s…...

智能手表测试计划文档(软/硬件)

&#x1f4c4; 智能手表测试计划文档&#xff08;软/硬件&#xff09; 项目名称&#xff1a;Aurora Watch S1 文档编号&#xff1a;AW-S1-QA-TP-001 编制日期&#xff1a;2025-xx-xx 版本&#xff1a;V1.0 编写人&#xff1a;xxx&#xff08;测试主管&#xff09; 一、测试目标…...

基于大模型的原发性醛固酮增多症全流程预测与诊疗方案研究

目录 一、引言 1.1 研究背景与意义 1.2 国内外研究现状 1.3 研究目的与方法 二、原发性醛固酮增多症概述 2.1 疾病定义与发病机制 2.2 临床表现与诊断标准 2.3 流行病学特征 三、大模型预测原理与技术 3.1 大模型简介 3.2 预测原理与算法 3.3 数据收集与预处理 四…...

spring中的@Lazy注解详解

一、核心功能与作用 Lazy 注解是 Spring 框架中用于延迟 Bean 初始化的核心工具&#xff0c;通过将 Bean 的创建推迟到首次使用时&#xff0c;优化资源利用和启动性能。其核心功能包括&#xff1a; 延迟初始化 默认情况下&#xff0c;Spring 在容器启动时立即初始化所有单例 …...

Docker快速入门与应用

1. 什么是 Docker&#xff1f; Docker 就像一个“魔法箱子”&#xff0c;可以把你开发的应用&#xff08;代码、环境、配置&#xff09;‌打包成一个标准化的容器‌&#xff0c;这个容器可以在任何支持 Docker 的系统上运行&#xff0c;无需担心环境差异导致的问题。 ‌类比‌…...

判断一个数是不是素数的最高效的算法

判断一个数是否是素数&#xff0c;有从简单到复杂多种方法。最高效的算法取决于输入规模&#xff08;是几个亿以内的数&#xff0c;还是上百位的大整数&#xff09;&#xff0c;我会按实用场景分类讲解&#xff1a; ✅ 常规范围内&#xff08;比如 ≤ 1e12&#xff09;判断素数…...

《Head First 设计模式》第一章 - 笔记

本书是本人写的设计模式的笔记&#xff0c;写下核心要点&#xff0c;如果你掌握过设计模式&#xff0c;想快速阅读本书内容&#xff0c;这个笔记适合你阅读。如果你是新手&#xff0c;有 java 基础和 oo 设计原则基础&#xff0c;你适合跟我一样从零阅读本书。 第一章 策略模式…...

GPT系列:自然语言处理的演进与多模态的探索

GPT系列&#xff1a;自然语言处理的演进与多模态的探索 GPT系列的发展一、GPT-1 &#xff1a;通过生成式的预训练改进自然语言GPT-1的动机做一个预训练模型的难点GPT-1的微调模式GPT-1的训练数据Bert 二、GPT-2语言模型是非监督的GPT-2的动机引入promptGPT-2模型架构的改变GPT-…...

Linux驱动:驱动编译流程了解

要求 1、开发板中的linux的zImage必须是自己编译的 2、内核源码树,其实就是一个经过了配置编译之后的内核源码。 3、nfs挂载的rootfs,主机ubuntu中必须搭建一个nfs服务器。 内核源码树 解压 tar -jxvf x210kernel.tar.bz2 编译 make x210ii_qt_defconfigmakeCan’t use ‘…...

【MySQL】数据库基础

目录 1.什么是数据库2.见一见数据库3.服务器、表、库之间的关系4.MySQL架构5.sql语句分类6.查看MySQL存储引擎6.1 查看存储引擎6.2 常见存储引擎对比 1.什么是数据库 概念&#xff1a;数据库一般是指&#xff0c;在磁盘或者内存中存储的特定结构组织的数据 – 将来在磁盘上存储…...

1.1 文章简介

前因后果链 行业需求 → 技能断层 → 课程设计响应 (高薪岗位要求数学基础) → (符号/公式理解困难) → (聚焦原理与应用) 行业驱动因素 • 前因&#xff1a;机器学习/AI等领域的高薪岗位激增&#xff0c;但数学能力成为主要门槛 • 关键矛盾&#xff1a;算法论文中的数学…...

laravel 中使用的pdf 扩展包 laravel-snappy(已解决中文乱码)

Centos7 安装 wkhtmltopdf 1、先查看系统是 32 位的还是 64 位的 uname -a2、通过 composer 安装 wkhtmltopdf 32位: $ composer require h4cc / wkhtmltopdf-i386 0.12.x $ composer require h4cc / wkhtmltoimage-i386 0.12.x 64位: $ composer require h4cc/wkhtmltopdf-…...

java反序列化commons-collections链6

cc链6&#xff0c;最好用的cc链&#xff0c;因为它不受jdk版本的限制和cc版本的限制&#xff0c;前半段很像urldns链&#xff0c;后半段是cc1链 先来看一下它的利用链 Gadget chain:java.io.ObjectInputStream.readObject()java.util.HashSet.readObject()java.util.HashMap.p…...

WebSocket的原理及QT示例

一.WebSocket 介绍 1.概述 WebSocket 是一种在单个 TCP 连接上进行全双工通讯的协议&#xff0c;它在 2011 年被 IETF 定为标准 RFC 6455&#xff0c;并由 RFC7936 补充规范。与传统的 HTTP 协议不同&#xff0c;WebSocket 允许服务器和客户端之间进行实时、双向的数据传输&a…...

css 点击后改变样式

背景&#xff1a; 期望实现效果&#xff1a;鼠标点击之后&#xff0c;保持选中样式。 实现思路&#xff1a;在css样式中&#xff0c;:active 是一种伪类&#xff0c;用于表示用户当前正在与被选定的元素进行交互。当用户点击或按住鼠标时&#xff0c;元素将被激活&#xff0c;此…...

AI 在模仿历史语言方面面临挑战:大型语言模型在生成历史风格文本时的困境与研究进展

概述 在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;技术在诸多领域展现出了强大的能力&#xff0c;但在处理历史语言这一特定任务时&#xff0c;却遭遇了不小的挑战。美国和加拿大的研究人员通过合作发现&#xff0c;像 ChatGPT 这样的大型语言模型&#x…...

C++.Windows图形

Windows图形 1. 基础知识1.1 Windows图形编程基础1.2 GDI与GDI1.3 窗口消息处理2.1 注册窗口类2.2 创建窗口2.3 显示窗口3.1 创建按钮3.2 按钮消息处理4.1 设置窗口透明度4.2 透明窗口示例5.1 使用区域创建异形窗口5.2 异形窗口示例6.1 GDI抗锯齿设置6.2 抗锯齿绘图示例7.1 Dir…...

【Vue3】使用vite创建Vue3工程、Vue3基本语法讲解

一、什么是Vite Vite是新一代前端构建工具&#xff0c;官网地址&#xff1a;Vite中文网&#xff0c;vite的优势如下&#xff1a; 轻量快速的热重载&#xff08;HMR&#xff09;&#xff0c;能实现极速的服务启动对TypeScript、JSX、CSS等支持开箱即用真正的按需编译&#xff…...

专题二:二叉树的深度优先搜索

以leetcode2331题为例 题目分析&#xff1a; 以第一个示例为例 算法原理分析&#xff1a; 从宏观角度&#xff0c;也就是我的算法之回溯的第一篇 我们发现我们在研究示例的时候&#xff0c;必须从下往上推 也就是我在研究一个结点是true还是false的时候&#xff0c;必须…...

Termius ssh连接服务器 vim打开的文件无法复制问题

你的问题是&#xff1a; • 在 Termius (macOS) SSH 连接到 VMware Ubuntu&#xff0c;使用 vim 打开 .cpp 文件时&#xff0c;可以复制文本&#xff1b; • 但在 Windows 10 上 SSH 到 VMware 的 Red Hat 6.4 时&#xff0c;复制操作无效。 ⸻ &#x1f3af; 初步分析 复制…...

搭建大数据学习的平台

一、基础环境准备 1. 硬件配置 物理机&#xff1a;建议 16GB 内存以上&#xff0c;500GB 硬盘&#xff0c;多核 CPU虚拟机&#xff1a;至少 3 台&#xff08;1 主 2 从&#xff09;&#xff0c;每台 4GB 内存&#xff0c;50GB 硬盘 2. 操作系统 Ubuntu 20.04 LTS 或 CentOS…...