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

山西建设网站/搜索引擎优化实训

山西建设网站,搜索引擎优化实训,赤峰网站建设培训,做网站生意不赚钱前端各种文本文件预览 文本编辑excel预览编辑 pdf预览word预览 excel下载pdf下载word下载 各种文本文件预览(pdf, xlsx, docx, cpp, java, sql, py, vue, html, js, json, css, xml, rust, md, txt, log, fa, fasta, tsv, csv 等各种文本文件) 其中 除p…

前端各种文本文件预览 文本编辑excel预览编辑 pdf预览word预览 excel下载pdf下载word下载

各种文本文件预览(pdf, xlsx, docx, cpp, java, sql, py, vue, html, js, json, css, xml, rust, md, txt, log, fa, fasta, tsv, csv 等各种文本文件)
其中 除pdf,xlsx,docx之外的文本还可以修改,xlsx想要修改看我另一篇博客luckyexcel 编辑预览excel文件

先看效果
请添加图片描述

引入库

//预览编辑文本用"@codemirror/lang-cpp": "^6.0.2","@codemirror/lang-css": "^6.2.1","@codemirror/lang-html": "^6.4.9","@codemirror/lang-java": "^6.0.1","@codemirror/lang-javascript": "^6.2.2","@codemirror/lang-json": "^6.0.1","@codemirror/lang-markdown": "^6.2.5","@codemirror/lang-python": "^6.1.6","@codemirror/lang-rust": "^6.0.1","@codemirror/lang-sql": "^6.7.0","@codemirror/lang-vue": "^0.1.3","@codemirror/lang-xml": "^6.1.0","@codemirror/theme-one-dark": "^6.1.2","codemirror": "^6.0.1",//预览word、pdf、excel文件用"@vue-office/docx": "^1.6.2","@vue-office/excel": "^1.7.11","@vue-office/pdf": "^2.0.2",//导出word"buffer": "^6.0.3","docxtemplater": "^3.46.0","file-saver": "^2.0.5","pizzip": "^3.1.6","jszip-utils": "^0.1.0",//导出pdf"html2canvas": "^1.4.1","jspdf": "^2.5.1",//导出xlsx文件(试用于electron,web也可以用)"node-xlsx": "^0.23.0",//或者用xlsx库"xlsx": "^0.18.5"

导出pdf、xlsx、word文件

<template><div class="content" id="exportPdf"><a-space><a-button type="primary" @click="exportWord">导出word</a-button><a-button type="primary" @click="exportXlsx">导出elcel</a-button><a-button type="primary" @click="exportPdf">导出pdf</a-button><a-button type="primary" @click="() => router.push('/preview')">文件预览</a-button></a-space><br /><br /><hr /><div class="flex flex-justify-around"><div>unocss</div><div>测试</div><div>可以用的</div></div><br /><div class="text-center"><a href="https://unocss.dev/interactive/" target="_blank" rel="noopener noreferrer">unocss 文档</a></div></div>
</template><script lang="ts" setup>import { useRouter } from 'vue-router';
import { setLogin, getUserInfo } from '../../serve/api/login';
import { globalData } from '../../setting/global';import { Buffer } from 'buffer';
import xlsx from 'node-xlsx';import docxtemplater from 'docxtemplater';
import PizZip from 'pizzip';
import JSZipUtils from 'jszip-utils';
import { saveAs } from 'file-saver';import html2canvas from 'html2canvas';
import JsPDF from 'jspdf';const router = useRouter();const tableValue = reactive({unit: '中国',date: undefined,sampleType: '你猜',people: '黄种人',name: '夜空',sex: '男',age: '25',work: '开发',id: '',jiance: '商品化试剂盒',date2: undefined,
});
const exportWord = () => {let docxname = '导出word.docx';JSZipUtils.getBinaryContent('/template.docx', function (error: any, content: any) {// template.docx是模板(这里我放到public公共文件夹下面了)。我们在导出的时候,会根据此模板来导出对应的数据// 抛出异常if (error) {throw error;}// 创建一个PizZip实例,内容为模板的内容let zip = new PizZip(content);// 创建并加载docx templater实例对象let doc = new docxtemplater().loadZip(zip);// 设置模板变量的值  主要变量替换在这里doc.setData({name: tableValue.name,unit: tableValue.unit,date: '这里也不可以不写变量',sampleType: tableValue.sampleType,sex: tableValue.sex,age: tableValue.age,});try {// 用模板变量的值替换所有模板变量doc.render();} catch (error: any) {// 抛出异常let e = {message: error.message,name: error.name,stack: error.stack,properties: error.properties,};console.log(JSON.stringify({error: e,}),);throw error;}// 生成一个代表docxtemplater对象的zip文件(不是一个真实的文件,而是在内存中的表示)let out = doc.getZip().generate({type: 'blob',mimeType: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',});// 将目标文件对象保存为目标类型的文件,并命名saveAs(out, docxname);});
};
const exportXlsx = () => {let data = [[1, 222, '', '', '', ''],['', 2, 3, 4, 5, 6],['', 2, 3, 4, 5, 6],['', 2, 3, 4, 5, 6],['', 2, 3, 4, 5, 6],[22, 2, 3, 4, 5, 6],];// 行列合并规则  c:col 列   r:row 行const range0 = { s: { c: 0, r: 0 }, e: { c: 0, r: 4 } };const range1 = { s: { c: 1, r: 0 }, e: { c: 5, r: 0 } };const sheetOptions = {'!merges': [range0, range1],// cols 列宽大小'!cols': [{ wch: 5 }, { wch: 10 }, { wch: 15 }, { wch: 20 }, { wch: 30 }, { wch: 50 }],};//如果不需要格式,这里的sheetOptions可以省略不写let result = xlsx.build([{ name: 'sheet1', data }], { sheetOptions });const ab = Buffer.from(result, 'binary');const blob = new Blob([ab]);const blobUrl = URL.createObjectURL(blob);const a = document.createElement('a');a.href = blobUrl;a.download = '导出excel.xlsx';a.click();window.URL.revokeObjectURL(blobUrl);
};
const exportPdf = () => {downloadPDF(document.querySelector('#exportPdf'), '导出pdf文件', pdfSuc(), 4);
};
const pdfSuc = () => {message.success('导出成功');
};
/*** ele:需要导出的容器* pdfName:导出文件的名字* callback: 成功回调*/
const downloadPDF = (ele: any, pdfName: any, callback: any, scale?: number) => {html2canvas(ele, {dpi: 600,scale: scale ? scale : 8,// allowTaint: true,  //允许 canvas 污染, allowTaint参数要去掉,否则是无法通过toDataURL导出canvas数据的useCORS: true, //允许canvas画布内 可以跨域请求外部链接图片, 允许跨域请求。width: ele.scrollWidth,height: ele.scrollHeight,}).then((canvas) => {//未生成pdf的html页面高度var leftHeight = canvas.height;var a4Width = 595.28;var a4Height = 801.89; //(一张A4高=841.89减去20,使得上下边距空出20,pdf.addImage生成上边距(第四个参数=10)致使使得上下边距各10)//一页pdf显示html页面生成的canvas高度;var a4HeightRef = Math.floor((canvas.width / a4Width) * a4Height);//pdf页面偏移var position = 0;var pageData = canvas.toDataURL('image/jpeg', 1.0);var pdf = new JsPDF('x', 'pt', 'a4');var index = 1,canvas1 = document.createElement('canvas'),height;pdf.setDisplayMode('fullwidth', 'continuous', 'FullScreen');function createImpl(canvas) {if (leftHeight > 0) {index++;var checkCount = 0;if (leftHeight > a4HeightRef) {var i = position + a4HeightRef;for (i = position + a4HeightRef; i >= position; i--) {var isWrite = true;for (var j = 0; j < canvas.width; j++) {var c = canvas.getContext('2d').getImageData(j, i, 1, 1).data;if (c[0] != 0xff || c[1] != 0xff || c[2] != 0xff) {isWrite = false;break;}}if (isWrite) {checkCount++;if (checkCount >= 10) {break;}} else {checkCount = 0;}}height = Math.round(i - position) || Math.min(leftHeight, a4HeightRef);if (height <= 0) {height = a4HeightRef;}} else {height = leftHeight;}canvas1.width = canvas.width;canvas1.height = height;var ctx = canvas1.getContext('2d');ctx.drawImage(canvas, 0, position, canvas.width, height, 0, 0, canvas.width, height);if (position != 0) {pdf.addPage();}// 在pdf.addImage(pageData, 'JPEG', 左间距,上间距,宽度,高度)设置在pdf中显示;pdf.addImage(canvas1.toDataURL('image/jpeg', 1.0),'JPEG',70,56,a4Width - 140,(a4Width / canvas1.width) * height - 112,);leftHeight -= height;position += height;if (leftHeight > 0) {setTimeout(createImpl, 500, canvas);callback();} else {pdf.save(pdfName);callback();}}}// 当内容未超过pdf一页显示的范围,无需分页if (leftHeight < a4HeightRef) {pdf.addImage(pageData, 'JPEG', 0, 50, a4Width, (a4Width / canvas.width) * leftHeight);pdf.save(pdfName);// callback();} else {try {pdf.deletePage(0);setTimeout(createImpl, 500, canvas);} catch (err) {console.log(err);}}});
};
</script><style lang="less" scoped>
.content {width: 90vw;min-height: 90vh;margin: 5vh auto;padding: 20px;outline: 1px dashed #999;
}
</style>

预览各种文本

<!--* @Descripttion:* @Author: 苍狼一啸八荒惊* @Date: 2024-08-12 12:18:53* @LastEditTime: 2024-08-13 15:27:27* @LastEditors: 夜空苍狼啸
-->
<script lang="ts" setup>
// ! 目前不支持doc、xls格式文件的预览
//引入VueOfficeDocx组件
import VueOfficeDocx from '@vue-office/docx';
import '@vue-office/docx/lib/index.css';//引入VueOfficeExcel组件
import VueOfficeExcel from '@vue-office/excel';
import '@vue-office/excel/lib/index.css';//引入VueOfficePdf组件
import VueOfficePdf from '@vue-office/pdf';import { message } from 'ant-design-vue';
import { useRouter } from 'vue-router';
const router = useRouter();
const fileText: any = undefined;
const data = reactive({loading: false,fileList: [],fileType: 'xlsx',//   docxSrc: 'http://static.shanhuxueyuan.com/test6.docx',//   excelSrc: 'http://static.shanhuxueyuan.com/demo/excel.xlsx',docxSrc: '',excelSrc: '/template.xlsx',pdfSrc: '',codemirror: false,fileText,refreshCodemirrorKey: 0,
});
const customUpload = async (info: any) => {data.loading = true;console.log(info);let suffixName = info.file.name.split('.').pop();data.fileType = suffixName;data.codemirror = false;let fileReader = new FileReader();fileReader.readAsArrayBuffer(info.file);if (['docx', 'doc'].includes(suffixName)) {if (suffixName === 'doc') {message.info('请上传docx格式的文件');return;}fileReader.onload = () => {data.docxSrc = fileReader.result;};} else if (['xlsx', 'xls'].includes(suffixName)) {if (suffixName === 'xls') {message.info('请上传xlsx格式的文件');return;}fileReader.onload = () => {data.excelSrc = fileReader.result;};} else if (['pdf'].includes(suffixName)) {fileReader.onload = () => {data.pdfSrc = fileReader.result;};} else if (['cpp', 'java', 'sql', 'py', 'vue', 'html', 'js', 'json', 'css', 'xml', 'rust', 'md'].includes(suffixName,)) {// 文本,启用 Codemirrordata.codemirror = true;data.fileText = await readFileAsync(info.file);data.refreshCodemirrorKey++;} else {// message.info('该格式暂不支持查看!');data.codemirror = true;data.fileText = await readFileAsync(info.file);data.refreshCodemirrorKey++;}data.loading = false;
};
const handleChange = async (e: any) => {let file = e.target.files[0];let suffixName = file.name.split('.').pop();data.fileType = suffixName;data.codemirror = false;let fileReader = new FileReader();fileReader.readAsArrayBuffer(file);if (['docx', 'doc'].includes(suffixName)) {if (suffixName === 'doc') {message.info('请上传docx格式的文件');return;}fileReader.onload = () => {data.docxSrc = fileReader.result;};} else if (['xlsx', 'xls'].includes(suffixName)) {if (suffixName === 'xls') {message.info('请上传xlsx格式的文件');return;}// 使用blob文件流let blob = new Blob([file], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',});data.excelSrc = URL.createObjectURL(blob);// 读取文件的ArrayBuffer// fileReader.onload = () => {//   data.excelSrc = fileReader.result;// };// data.excelSrc = URL.createObjectURL(file);} else if (['pdf'].includes(suffixName)) {fileReader.onload = () => {data.pdfSrc = fileReader.result;};} else if (['txt', 'vue', 'json', 'java', 'sql', 'js', 'css', 'xml', 'html', 'yaml', 'md', 'py'].includes(suffixName,)) {// 文本,启用 Codemirrordata.codemirror = true;data.fileText = await readFileAsync(file);data.refreshCodemirrorKey++;} else {// message.info('该格式暂不支持查看!');data.codemirror = true;data.fileText = await readFileAsync(file);data.refreshCodemirrorKey++;}
};
const rendered = () => {console.log('渲染完成');
};
const errorHandler = () => {console.log('渲染失败');
};// 读取文本文件内容
const readFileAsync = (file: Blob | File) => {return new Promise((resolve, reject) => {// 读取文件里面的内容返回var reader = new FileReader();// 以文本格式读取文件reader.readAsText(file, 'UTF-8');reader.onload = function (event) {resolve(event.target.result);};reader.onerror = function (event) {reject(event.target);};});
};onMounted(() => {});
</script>
<template><div class="content"><div class="mb-1 color-red-500">支持预览文件: pdf, xlsx, docx, cpp, java, sql, py, vue, html, js, json, css, xml, rust, md,txt, log, fa, fasta, tsv, csv 等各种文本文件</div><a-space class="mb-1"><!-- accept="application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" --><a-uploadv-model:file-list="data.fileList":customRequest="customUpload"name="file":multiple="false":showUploadList="false"><a-button :loading="data.loading" type="primary">上传文件</a-button></a-upload><input type="file" ref="fileButton" @change="handleChange" /><a-button type="primary" @click="() => router.push('/index')">文件导出</a-button></a-space><!-- office --><div v-if="!data.codemirror"><!-- docx --><vue-office-docxv-if="data.fileType === 'docx'":src="data.docxSrc"style="height: 80vh"@rendered="rendered"@error="errorHandler"/><!-- excel --><vue-office-excelv-else-if="data.fileType === 'xlsx'":src="data.excelSrc"style="height: 80vh"@rendered="rendered"@error="errorHandler"/><!-- pdf --><vue-office-pdfv-else-if="data.fileType === 'pdf'":src="data.pdfSrc"style="height: 100vh"@rendered="rendered"@error="errorHandler"/></div><!-- 文本 --><div v-else class="mt--6"><Codemirror :fileText="data.fileText" :fileType="data.fileType" /><!-- :key="data.refreshCodemirrorKey" --></div></div>
</template><style lang="less" scoped>
.content {width: 90vw;min-height: 90vh;margin: 5vh auto;padding: 20px;outline: 1px dashed #999;
}
</style>

子组件

<!--* @Descripttion: * @Author: 苍狼一啸八荒惊* @Date: 2024-08-12 13:51:19* @LastEditTime: 2024-08-13 15:36:07* @LastEditors: 夜空苍狼啸
--><script lang="ts" setup>
// codemirror api https://codemirror.net/docs/guide/
import { EditorState, Text, Compartment } from '@codemirror/state';
import { basicSetup, EditorView } from 'codemirror';
import { keymap, lineNumbers } from '@codemirror/view';
import { defaultKeymap } from '@codemirror/commands';
import { oneDark } from '@codemirror/theme-one-dark';import { json, jsonParseLinter } from '@codemirror/lang-json';
import { css } from '@codemirror/lang-css';
import { cpp } from '@codemirror/lang-cpp';
import { html } from '@codemirror/lang-html';
import { java } from '@codemirror/lang-java';
import { javascript as js } from '@codemirror/lang-javascript';
import { markdown as md } from '@codemirror/lang-markdown';
import { python as py } from '@codemirror/lang-python';
import { sql } from '@codemirror/lang-sql';
import { rust } from '@codemirror/lang-rust';
import { vue } from '@codemirror/lang-vue';
import { xml } from '@codemirror/lang-xml';
import { saveTextAsFile } from '/@/libs/utils/download';
const props = defineProps({fileText: {type: String,default: 'hello word!', //文本},fileType: {type: String,default: 'json', // 编辑模式(文件类型)},
});const data = reactive({fontSize: '14',theme: 'dark', // codeMirror主题readOnly: false,lineNumber: true,
});const editorRef: Ref<InstanceType<typeof Element> | undefined> = ref();onMounted(() => {});
onUnmounted(() => {view?.destroy();
});
watch(() => props.fileText,(n) => {init();},
);let view: any;
const init = () => {view?.destroy();let startState = EditorState.create({doc: props.fileText,extensions: [data.lineNumber ? basicSetup : [],data.theme == 'default' ? [] : oneDark,EditorState.readOnly.of(!data.readOnly),textType(props.fileType),// 自定义主题// EditorView.theme(//   {//     '&': {//       color: 'white',//       backgroundColor: '#034',//     },//     '.cm-content': {//       caretColor: '#0e9',//     },//     '&.cm-focused .cm-cursor': {//       borderLeftColor: '#0e9',//     },//     '&.cm-focused .cm-selectionBackground, ::selection': {//       backgroundColor: '#074',//     },//     '.cm-gutters': {//       backgroundColor: '#045',//       color: '#ddd',//       border: 'none',//     },//   },//   { dark: true },// ),],// extensions: [keymap.of(defaultKeymap)],});view = new EditorView({state: startState,parent: unref(editorRef),});
};
const textType = (type: string) => {// if (supportType.includes(type)) {//   // eval 将字符串转化为函数//   return eval(type + '()');// } else {//   return keymap.of(defaultKeymap);// }return type == 'json'? json(): type == 'css'? css(): type == 'cpp'? cpp(): type == 'html'? html(): type == 'java'? java(): type == 'js' || type == 'ts'? js(): type == 'md'? md(): type == 'py'? py(): type == 'sql'? sql(): type == 'rust'? rust(): type == 'vue'? vue(): type == 'xml'? xml(): keymap.of(defaultKeymap);
};
//节流
let timer_throttle: any;
const throttle = (fn: Function, wait?: number) => {wait = wait || 100;if (!timer_throttle) {timer_throttle = setTimeout(() => {fn.apply(this);timer_throttle = null;}, wait);}
};const handFontSize = (value: string) => {let cmContent = document.querySelector('.cm-content');if (cmContent) {cmContent.style.fontSize = value + 'px';}
};
const handTheme = (value: string) => init();const handLineNumber = (value: boolean) => init();const handReadOnly = (value: boolean) => init();
const saveFile = () => {console.log(view?.state.doc.toString());saveTextAsFile(view?.state.doc.toString(), 'newFile.' + props.fileType);
};
</script>
<template><div class="flex-end mt-2 mb-2"><a-space><a-button type="primary" v-if="data.readOnly" @click="saveFile">保存</a-button><a-select v-model:value="data.fontSize" class="w-px-100" @change="handFontSize"><a-select-option value="12">12px</a-select-option><a-select-option value="14">14px</a-select-option><a-select-option value="16">16px</a-select-option><a-select-option value="18">18px</a-select-option></a-select><a-select v-model:value="data.theme" class="w-px-100" @change="handTheme"><a-select-option value="default">默认</a-select-option><a-select-option value="dark">dark</a-select-option></a-select><a-switchchecked-children="显示行号"un-checked-children="不显示"v-model:checked="data.lineNumber"@change="handLineNumber"/><a-switchchecked-children="可编辑"un-checked-children="不可编辑"v-model:checked="data.readOnly"@change="handReadOnly"/></a-space></div><div ref="editorRef"></div><!-- <CodemirrorCodemirror :value="fileText" :fileType :lineNumber :readOnly :theme="data.theme" /> -->
</template><style lang="less" scoped></style>

相关文章:

前端各种文本文件预览 文本编辑excel预览编辑 pdf预览word预览 excel下载pdf下载word下载

前端各种文本文件预览 文本编辑excel预览编辑 pdf预览word预览 excel下载pdf下载word下载 各种文本文件预览&#xff08;pdf, xlsx, docx, cpp, java, sql, py, vue, html, js, json, css, xml, rust, md, txt, log, fa, fasta, tsv, csv 等各种文本文件&#xff09; 其中 除p…...

【Qt】QPluginLoader 类学习

文章目录 一、简介二、常用方法2.1 构造函数2.2 动态加载方法——load()2.3 检查是否加载成功——isLoaded()2.4 访问插件中的根组件——instance()2.5 卸载插件——unload() 一、简介 QPluginLoader 类在运行时加载插件。 QPluginLoader 提供对Qt插件的访问。Qt插件存储在共享…...

DataGear 企业版 1.2.0 发布,数据可视化分析平台

DataGear 企业版 1.2.0 已发布&#xff0c;欢迎体验&#xff01; http://datagear.tech/pro/ 企业版 1.2.0 修复严重漏洞&#xff0c;新增文件源管理模块&#xff0c;新增JWT统一登录支持&#xff0c;MQTT数据集主题支持通配符&#xff0c;具体更新内容如下&#xff1a; 新增…...

为啥https比http慢

Https有ssl的握手 HTTP没有 HTTPS TCP 和HTTP 的TCP 时间差不是很大 HTTPS请求中,ssl所占的时间比例是请求时间总和93.37%, HTTPS请求中,ssl的请求会是tcp请求的14倍,而HTTP中没有这个问题 建议:对安全要求不是很高的,不要使用https请求 图例...

软件测试需要具备的基础知识【功能测试】---后端知识(三)

​ ​ 您好&#xff0c;我是程序员小羊&#xff01; 前言 为了更好的学习软件测试的相关技能&#xff0c;需要具备一定的基础知识。需要学习的基础知识包括&#xff1a; 1、计算机基础 2、前端知识 3、后端知识 4、软件测试理论 后期分四篇文章进行编写&#xff0c;这是第三篇 …...

详解 Redis 队列 实现

Redis 是一个高性能的键值存储系统&#xff0c;它的多种数据结构使其能够以不同方式实现队列&#xff0c;包括普通队列、延时队列和异步队列的介绍和示例。 介绍 Redis 的 List 数据结构可以用来实现普通的队列。 生产者使用 LPUSH 或 RPUSH 命令将消息添加到列表的头部或尾部…...

分析SQL的count(*)并优化

最近优化过几个慢查询接口的性能&#xff0c;总结了一些心得体会拿出来跟大家一起分享一下&#xff0c;希望对你会有所帮助。 我们使用的数据库是Mysql8&#xff0c;使用的存储引擎是Innodb。这次优化除了优化索引之外&#xff0c;更多的是在优化count(*)。 通常情况下&#…...

Java学习日记(day18)

一、软件的结构 C/S (Client - Server 客户端-服务器端) 典型应用&#xff1a;QQ软件 &#xff0c;飞秋&#xff0c;印象笔记。 特点&#xff1a; 必须下载特定的客户端程序。服务器端升级&#xff0c;客户端升级。 B/S &#xff08;Broswer -Server 浏览器端- 服务器端&a…...

Oracle(61)什么是外部表(External Table)?

外部表&#xff08;External Table&#xff09;是Oracle数据库中的一种特殊表类型&#xff0c;用于访问存储在外部文件系统中的数据&#xff0c;而不需要将数据实际加载到数据库内部。外部表的主要优势在于允许数据库用户在不移动或复制数据的情况下&#xff0c;直接查询和处理…...

物联网HMI/网关搭载ARM+CODESYS实现软PLC+HMI一体化

物联网HMI/网关搭载CODESYS实现软PLCHMI一体化 硬件&#xff1a;ARM平台&#xff0c;支持STM32/全志T3/RK3568/树莓派等平台 软件&#xff1a;CODESYS V3.5、JMobile Studio CODESYS是一款功能强大的PLC软件编程工具&#xff0c;它支持IEC61131-3标准IL、ST、FBD、LD、CFC、…...

Java中Stream流

Java中Stream流 Stream 使用flatMap处理嵌套集合: 有一个对象列表&#xff0c;每个对象又包含一个列表&#xff0c;可以使用flatMap来“展平”这个结构。 List<List<String>> listOfLists Arrays.asList(Arrays.asList("a", "b"),Arrays.a…...

纯css实现多行文本右下角最后一行展示全部按钮

未展开全部&#xff1a; 展开全部&#xff1a; 综上演示按钮始终保持在最下方 css代码如下&#xff1a; <div class"info-content"><div class"info-text" :class"!showAll ? mle-hidden : "><span class"show-all"…...

WPF篇(17)-ListBox列表控件+ListView数据列表控件

ListBox列表控件 ListBox是一个列表控件&#xff0c;用于显示条目类的数据&#xff0c;默认每行只能显示一个内容项&#xff0c;当然&#xff0c;我们可以通过修改它的数据模板&#xff0c;来自定义每一行&#xff08;元素&#xff09;的数据外观&#xff0c;达到显示更多数据…...

HAProxy 全解析:驾驭网络负载均衡与高可用的强大引擎

一、什么是HAproxy HAProxy是一个免费、开源的高性能TCP/HTTP负载均衡器和代理服务器软件&#xff0c;主要用于实现以下功能 一、负载均衡 多种负载均衡算法支持&#xff1a; 轮询&#xff08;Round Robin&#xff09;&#xff1a;它依次将请求均匀分配到后端的各个服务器。例…...

陶瓷材质的防静电架空地板越来越受欢迎的原因

目前市面上的陶瓷防静电架空地板主要分为两种&#xff1a;钢基和硫酸钙基。前者是以全钢冲孔裸板作为板基&#xff0c;经粘接、固定整型和灌浆的方式加工而成&#xff0c;后者是以复合硫酸钙板为基材&#xff0c;表面粘接防静电陶瓷砖&#xff0c;四周导电PVC边条封边。近年来陶…...

Mariadb数据库本机无密码登录的问题解决

Mariadb数据库本机无密码登录的问题解决 安装了mariadb后&#xff0c;发现Mariadb本机无密码才能登录 百度了很多文章&#xff0c;发现很多人是因为root的plugin设置的值不正确导致的&#xff0c;unix_socket可以不需要密码&#xff0c;mysql_native_password 是正常的。 解…...

校园外卖平台小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;商家管理&#xff0c;菜品信息管理&#xff0c;菜品分类管理&#xff0c;购买菜品管理&#xff0c;订单信息管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&a…...

Python3 第八十一课 -- urllib

目录 一. 前言 二. urllib.request 三. urllib.error 四. urllib.parse 五. urllib.robotparser 一. 前言 Python urllib 库用于操作网页 URL&#xff0c;并对网页的内容进行抓取处理。 本文主要介绍 Python3 的 urllib。 urllib 包 包含以下几个模块&#xff1a; url…...

Vue 3+Vite+Eectron从入门到实战系列之(五)一后台管理登录页

前面已经讲了不少基础知识&#xff0c;这篇开始&#xff0c;我们进行实操&#xff0c;做个后台管理系统&#xff0c;打包成多端的,可安装的桌面app!!其中&#xff0c;登录&#xff0c;退出的提示信息用系统的提示&#xff0c;不使用elemengplus的弹窗提示&#xff01;&#xff…...

Docker 网络代理配置及防火墙设置指南

Docker 网络代理配置及防火墙设置指南 背景 在某些环境中&#xff0c;服务器无法直接访问外网&#xff0c;需要通过网络代理进行连接。虽然我们通常会在 /etc/environment 或 /etc/profile 等系统配置文件中直接配置代理&#xff0c;但 Docker 命令无法使用这些配置。例如&am…...

基于PostGIS(Postgres)+Node.js实现的xyz瓦片地图服务器

背景介绍 前两天研究GeoServer发布存储在PostGIS中栅格数据&#xff0c;最终目的是想在PostGIS中存储金字塔瓦片&#xff0c;用GeoServer发布&#xff0c;但是最后经过研究不改GeoServer源码的情况下&#xff0c;好像只支持将大图tif存在PostGIS数据库中进行发布&#xff0c;金…...

浙大数据结构慕课课后题(06-图3 六度空间)

题目要求&#xff1a; 输入格式: 输入第1行给出两个正整数&#xff0c;分别表示社交网络图的结点数N&#xff08;1<N≤103&#xff0c;表示人数&#xff09;、边数M&#xff08;≤33N&#xff0c;表示社交关系数&#xff09;。随后的M行对应M条边&#xff0c;每行给出一对正…...

Windows File Recovery卡在99%怎么解决?实用指南!

为什么会出现“Windows File Recovery卡在99%”的问题&#xff1f; Windows File Recovery&#xff08;Windows文件恢复&#xff09;是微软设计的命令行应用程序。它可以帮助用户从健康/损坏/格式化的存储设备中恢复已删除/丢失的文件。 通过输入相关命令&#xff0c;设置源/…...

数据结构之数组

写在前面 看下数组。 1&#xff1a;巴拉巴拉 数组是一种线性数据结构&#xff0c;使用连续的内存空间来存储数据&#xff0c;存储的数据要求有相同的数据类型&#xff0c;并且每个元素占用的内存空间相同。获取元素速度非常快&#xff0c;为O(1)常量时间复杂度&#xff0c;所…...

springboot集成sensitive-word实现敏感词过滤

文章目录 敏感词过滤方案一&#xff1a;正则表达式方案二&#xff1a;基于DFA算法的敏感词过滤工具框架-sensitive-wordspringboot集成sensitive-word步骤一&#xff1a;引入pom步骤二&#xff1a;自定义配置步骤三&#xff1a;自定义敏感词白名单步骤四&#xff1a;核心方法测…...

C++ 之动手写 Reactor 服务器模型(一):网络编程基础复习总结

基础 IP 地址可以在网络环境中唯一标识一台主机。 端口号可以在主机中唯一标识一个进程。 所以在网络环境中唯一标识一个进程可以使用 IP 地址与端口号 Port 。 字节序 TCP/IP协议规定&#xff0c;网络数据流应采用大端字节序。 大端&#xff1a;低地址存高位&#xff0c…...

qt 在vs2022 报错记录

1&#xff0c;qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed 需要把SSL 相关的库加入进去&#xff0c;如ssleay32.dll&#xff0c;libeay32.dll。 2&#xff0c;在一个文件中已定义&#xff0c;编译器在链接时&#xff0c;在多处报 已在.*…...

【人工智能】TensorFlow和机器学习概述

一、TensorFlow概述 TensorFlow是由Google Brain团队开发的开源机器学习库&#xff0c;用于各种复杂的数学计算&#xff0c;特别是在深度学习领域。以下是对TensorFlow的详细概述&#xff1a; 1. 核心概念 张量&#xff08;Tensor&#xff09;&#xff1a;TensorFlow中的基本…...

SQLALchemy 的介绍

SQLALchemy 的介绍 基本概述主要特点使用场景安装与配置安装 SQLAlchemy配置 SQLAlchemy示例&#xff1a;使用 SQLite 数据库连接到其他数据库 结论 总结 SQLAlchemy是Python编程语言下的一款开源软件&#xff0c;它提供了SQL工具包及对象关系映射&#xff08;ORM&#xff09;工…...

Java虚拟机:运行时内存结构

大家好&#xff0c;我是栗筝i&#xff0c;这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 035 篇文章&#xff0c;在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验&#xff0c;并希望进…...