springboot+itextpdf+thymeleaf+ognl根据静态模版文件实现动态生成pdf文件并导出demo

第一步:导入maven依赖

<!-- 导出为PDF依赖包 --><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId></dependency><dependency><groupId>com.itextpdf.tool</groupId><artifactId>xmlworker</artifactId><version>5.5.13.3</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>ognl</groupId><artifactId>ognl</artifactId><version>3.1.12</version></dependency>

第二步:制作thymeleaf静态模版文件并放置在resources目录下,可以自定义模版文件路径

如图所示

thymeleaf静态文件示例:
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml"><head><meta charset="utf-8"/><title>xxxx模版</title><style>#mainTable {border-collapse: collapse;border-style: solid;border-width: 0.5pt;width: 100%;}#mainTable td{text-align: center;padding: 8px;border-style: solid;border-width: 0.5pt;}</style>
</head><body><table id="header" boder="0" cellpadding="0" cellspacing="0" width="100%" style="margin-bottom:10px;margin-top:10px;"><tbody><tr><td id="img" rowspan="3"><img th:src="${xxxx}" style="border-radius: 50%;-webkit-border-radius: 50%;-moz-border-radius: 50%;-ms-border-radius: 50%;-o-border-radius: 50%;width: 60%;height: 60%;"/></td><td id="mainTitle" colspan="5" th:text="'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'+${xxxx}" style="font-size: 30px;font-style: '+';font-weight: bold;padding-left:30%;padding-bottom:10px;"></td></tr><tr><td></td><td id="xxxx" colspan="5" th:text="${xxxx}+哈哈" style="font-size: 30px;font-style: '+';font-weight: bold;padding-left:45%;padding-top:10px;"></td></tr><tr><td></td><td id="xxxx" colspan="5" style="text-align:right;padding-right:0px;">xxxx: <span  th:text="${xxxx}"></span></td></tr></tbody></table><table id="mainTable"><tbody><tr><td>xxxx</td><td th:text="${xxxx}"></td><td>xxxx</td><td th:text="${xxxx}"></td><td>xxxx</td><td th:text="${xxxx} + ${xxxx}"></td></tr><tr><td>xxxx</td><td colspan="2" th:text="${xxxx}"></td><td>xxxx</td><td colspan="2" th:text="${xxxx}"></td></tr><tr><td>xxxx</td><td colspan="2" th:text="${xxxx}"></td><td>xxxx</td><td colspan="2" th:text="${xxxx}"></td></tr><tr><td>xxxx</td><td colspan="2" th:text="${xxxx} + '/' + ${xxxx}"></td><td>xxxx</td><td colspan="2" th:text="${xxxx}"></td></tr><tr><td>xxxx</td><td colspan="5" style="text-align:left;" th:text="${xxxx}"></td></tr><tr><td>xxxx</td><td colspan="2" th:text="${xxxx}"></td><td>xxxx</td><td colspan="2" th:text="${xxxx}"></td></tr><tr><td height="250">xxxx</td><td colspan="5" style="text-align:left;" th:text="${xxxxx}"></td></tr><tr><td height="250">xxxx</td><td colspan="5" style="text-align:left;" th:text="${xxxx}"></td></tr><tr><td>xxxx</td><td colspan="5" style="text-align:left;"><img th:src="${xxxx}" style="width: 50%;height: 30%;"/></td></tr></tbody></table><div style="margin-top:40px;"><p>注:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</p></div></body></html>

第三步:实现编写生成pdf与下载工具,注意区分项目格式是war包还是jar包,目前我这边是两套实现方案。

jar包的方案是否同样适用于war包,我这边没有尝试,有兴趣的可以自己尝试,然后在评论区分享一下。

1)在jar包环境下加载静态模版文件时的代码示例:

静态模版无需加载包含base64格式的图片内容时,可用以下代码处理:

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.tool.xml.XMLWorkerFontProvider;
import com.itextpdf.tool.xml.XMLWorkerHelper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver;
import org.thymeleaf.templatemode.TemplateMode;import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;/*** @author leon* @date 2023/8/15* @description pdf 模版下载工具**/
@Component
@Slf4j
public class PdfTemplateDownload {@Autowiredprivate ApplicationContext applicationContext;/*** 下载pdf模版* @param response* @param paramMap* @param templateFileName* @param outputFileName*/public void downloadPdfTemplate(HttpServletResponse response,Map<String, Object> paramMap,String templateFileName,String outputFileName) {try {// 创建基于类路径资源的模板解析器SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();resolver.setApplicationContext(applicationContext); // 你需要注入Spring的应用上下文resolver.setTemplateMode(TemplateMode.HTML);resolver.setCharacterEncoding(StandardCharsets.UTF_8.name());resolver.setCacheable(true); // 在开发阶段设置为false,生产环境可改为trueresolver.setPrefix("classpath:/file/");resolver.setSuffix(".html");// 创建模版引擎TemplateEngine engine = new TemplateEngine();engine.setTemplateResolver(resolver);// 填充变量参数Context context = new Context();paramMap.forEach((k,v) -> context.setVariable(k, v));// 替换变量值String output = engine.process(templateFileName, context);// 设置导出文件名String exportName = "attachment;filename="+outputFileName;response.setHeader("Content-Disposition",new String(exportName.getBytes(StandardCharsets.UTF_8),"ISO8859-1"));response.setContentType("application/mspdf");response.setCharacterEncoding("utf-8");// 新建Document对象Document document = new Document(PageSize.A4);// 新建PdfWriter对象PdfWriter pdfWriter = PdfWriter.getInstance(document, response.getOutputStream());// 打开文档document.open();// 读取html文件内容InputStream htmlInputStream = new ByteArrayInputStream(output.getBytes(StandardCharsets.UTF_8));// 使用XMLWorkerHelper将html内容转为pdfXMLWorkerHelper xmlWorkerHelper = XMLWorkerHelper.getInstance();xmlWorkerHelper.parseXHtml(pdfWriter, document, htmlInputStream, Charset.forName("UTF-8"), new AsianFontProvider());// 关闭文档document.close();// 关闭输入流htmlInputStream.close();// 关闭文件输出流IOUtils.closeQuietly(response.getOutputStream());}catch (IOException e) {log.error("", e);}catch (DocumentException e) {log.error("", e);}}/*** 用于中文显示的Provider*/class AsianFontProvider extends XMLWorkerFontProvider {@Overridepublic Font getFont(final String fontname, String encoding, float size, final int style) {try {BaseFont bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);return new Font(bfChinese, size, style);}catch (Exception e) {}return super.getFont(fontname, encoding, size, style);}}}
若静态模版中有base64格式的图片信息,可换用下边的方法实现

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.tool.xml.Pipeline;
import com.itextpdf.tool.xml.XMLWorker;
import com.itextpdf.tool.xml.XMLWorkerFontProvider;
import com.itextpdf.tool.xml.XMLWorkerHelper;
import com.itextpdf.tool.xml.css.CssFilesImpl;
import com.itextpdf.tool.xml.css.StyleAttrCSSResolver;
import com.itextpdf.tool.xml.html.CssAppliersImpl;
import com.itextpdf.tool.xml.html.HTML;
import com.itextpdf.tool.xml.html.TagProcessorFactory;
import com.itextpdf.tool.xml.html.Tags;
import com.itextpdf.tool.xml.parser.XMLParser;
import com.itextpdf.tool.xml.pipeline.css.CssResolverPipeline;
import com.itextpdf.tool.xml.pipeline.end.PdfWriterPipeline;
import com.itextpdf.tool.xml.pipeline.html.HtmlPipeline;
import com.itextpdf.tool.xml.pipeline.html.HtmlPipelineContext;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver;
import org.thymeleaf.templatemode.TemplateMode;import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;/*** @author leon* @date 2023/8/15* @description pdf 模版下载工具**/
@Component
@Slf4j
public class PdfTemplateDownload {@Autowiredprivate ApplicationContext applicationContext;/*** 下载pdf模版,用于模版中需要展示base64格式的图片信息* @param response* @param paramMap* @param templateFileName* @param outputFileName*/public void downloadPdfTemplateForBase64Img(HttpServletResponse response,Map<String, Object> paramMap,String templateFileName,String outputFileName) {try {// 创建基于类路径资源的模板解析器SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();resolver.setApplicationContext(applicationContext); // 你需要注入Spring的应用上下文resolver.setTemplateMode(TemplateMode.HTML);resolver.setCharacterEncoding(StandardCharsets.UTF_8.name());resolver.setCacheable(true); // 在开发阶段设置为false,生产环境可改为trueresolver.setPrefix("classpath:/file/");resolver.setSuffix(".html");// 创建模版引擎TemplateEngine engine = new TemplateEngine();engine.setTemplateResolver(resolver);// 填充变量参数Context context = new Context();paramMap.forEach((k,v) -> context.setVariable(k, v));// 替换变量值String output = engine.process(templateFileName, context);// 设置导出文件名String exportName = "attachment;filename="+outputFileName;response.setHeader("Content-Disposition",new String(exportName.getBytes(StandardCharsets.UTF_8),"ISO8859-1"));response.setContentType("application/pdf");response.setCharacterEncoding("utf-8");// 新建Document对象Document document = new Document(PageSize.A4);// 新建PdfWriter对象PdfWriter pdfWriter = PdfWriter.getInstance(document, response.getOutputStream());// 打开文档document.open();// 自定义处理base64图片final TagProcessorFactory htmlTagProcessorFactory = Tags.getHtmlTagProcessorFactory();htmlTagProcessorFactory.removeProcessor(HTML.Tag.IMG);htmlTagProcessorFactory.addProcessor(new ImageTagProcessor(),HTML.Tag.IMG);final Charset charset = StandardCharsets.UTF_8;final CssFilesImpl cssFiles = new CssFilesImpl();cssFiles.add(XMLWorkerHelper.getInstance().getDefaultCSS());final StyleAttrCSSResolver cssResolver = new StyleAttrCSSResolver(cssFiles);final HtmlPipelineContext hpc = new HtmlPipelineContext(new CssAppliersImpl(new AsianFontProvider()));hpc.setAcceptUnknown(true).autoBookmark(true).setTagFactory(htmlTagProcessorFactory);final HtmlPipeline htmlPipeline = new HtmlPipeline(hpc, new PdfWriterPipeline(document, pdfWriter));final Pipeline<?> pipeline = new CssResolverPipeline(cssResolver, htmlPipeline);final XMLWorker worker = new XMLWorker(pipeline, true);final XMLParser p = new XMLParser(true, worker, charset);// 读取html文件内容InputStream htmlInputStream = new ByteArrayInputStream(output.getBytes(charset));p.parse(htmlInputStream, charset);// 关闭文档document.close();// 关闭输入流htmlInputStream.close();// 关闭文件输出流IOUtils.closeQuietly(response.getOutputStream());}catch (IOException e) {log.error("", e);}catch (DocumentException e) {log.error("", e);}}/*** 用于中文显示的Provider*/class AsianFontProvider extends XMLWorkerFontProvider {@Overridepublic Font getFont(final String fontname, String encoding, float size, final int style) {try {BaseFont bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);return new Font(bfChinese, size, style);}catch (Exception e) {}return super.getFont(fontname, encoding, size, style);}}}

2)在war包环境下加载静态模版文件时的代码示例:

包含了静态模版中需要加载与不需要加载base64格式的图片内容时的两个方法实现示例:

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.tool.xml.Pipeline;
import com.itextpdf.tool.xml.XMLWorker;
import com.itextpdf.tool.xml.XMLWorkerFontProvider;
import com.itextpdf.tool.xml.XMLWorkerHelper;
import com.itextpdf.tool.xml.css.CssFilesImpl;
import com.itextpdf.tool.xml.css.StyleAttrCSSResolver;
import com.itextpdf.tool.xml.html.CssAppliersImpl;
import com.itextpdf.tool.xml.html.HTML;
import com.itextpdf.tool.xml.html.TagProcessorFactory;
import com.itextpdf.tool.xml.html.Tags;
import com.itextpdf.tool.xml.parser.XMLParser;
import com.itextpdf.tool.xml.pipeline.css.CssResolverPipeline;
import com.itextpdf.tool.xml.pipeline.end.PdfWriterPipeline;
import com.itextpdf.tool.xml.pipeline.html.HtmlPipeline;
import com.itextpdf.tool.xml.pipeline.html.HtmlPipelineContext;
import com.wondersgroup.healthcloud.exception.CommonException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import org.thymeleaf.templatemode.TemplateMode;
import org.thymeleaf.templateresolver.FileTemplateResolver;import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;/*** @author leon* @date 2023/8/15* @description pdf 模版下载工具**/
@Component
@Slf4j
public class PdfTemplateDownload {/*** 下载pdf模版* @param response* @param paramMap* @param templateFileName* @param outputFileName*/public void downloadPdfTemplate(HttpServletResponse response,Map<String, Object> paramMap,String templateFileName,String outputFileName) {try {URL url = PdfTemplateDownload.class.getClassLoader().getResource("file/"+templateFileName);if (ObjectUtils.isEmpty(url)) {throw new CommonException("下载模版文件缺失");}File htmlFile = new File(url.getPath());// 创建html文件解析器FileTemplateResolver resolver = new FileTemplateResolver();resolver.setTemplateMode(TemplateMode.HTML);resolver.setSuffix(".html");// 创建模版引擎TemplateEngine engine = new TemplateEngine();engine.setTemplateResolver(resolver);// 填充变量参数Context context = new Context();paramMap.forEach((k,v) -> context.setVariable(k, v));// 替换变量值String output = engine.process(htmlFile.getAbsolutePath(), context);// 设置导出文件名String exportName = "attachment;filename="+outputFileName;response.setHeader("Content-Disposition",new String(exportName.getBytes(StandardCharsets.UTF_8),"ISO8859-1"));response.setContentType("application/pdf");response.setCharacterEncoding("utf-8");// 新建Document对象Document document = new Document(PageSize.A4);// 新建PdfWriter对象PdfWriter pdfWriter = PdfWriter.getInstance(document, response.getOutputStream());// 打开文档document.open();// 读取html文件内容InputStream htmlInputStream = new ByteArrayInputStream(output.getBytes(StandardCharsets.UTF_8));// 使用XMLWorkerHelper将html内容转为pdfXMLWorkerHelper xmlWorkerHelper = XMLWorkerHelper.getInstance();xmlWorkerHelper.parseXHtml(pdfWriter, document, htmlInputStream, Charset.forName("UTF-8"), new AsianFontProvider());// 关闭文档document.close();// 关闭输入流htmlInputStream.close();// 关闭文件输出流IOUtils.closeQuietly(response.getOutputStream());}catch (IOException e) {log.error("", e);}catch (DocumentException e) {log.error("", e);}}/*** 下载pdf模版,用于模版中需要展示base64格式的图片信息* @param response* @param paramMap* @param templateFileName* @param outputFileName*/public void downloadPdfTemplateForBase64Img(HttpServletResponse response,Map<String, Object> paramMap,String templateFileName,String outputFileName) {try {URL url = PdfTemplateDownload.class.getClassLoader().getResource("file/"+templateFileName);if (ObjectUtils.isEmpty(url)) {throw new CommonException("下载模版文件缺失");}File htmlFile = new File(url.getPath());// 创建html文件解析器FileTemplateResolver resolver = new FileTemplateResolver();resolver.setTemplateMode(TemplateMode.HTML);resolver.setSuffix(".html");// 创建模版引擎TemplateEngine engine = new TemplateEngine();engine.setTemplateResolver(resolver);// 填充变量参数Context context = new Context();paramMap.forEach((k,v) -> context.setVariable(k, v));// 替换变量值String output = engine.process(htmlFile.getAbsolutePath(), context);// 设置导出文件名String exportName = "attachment;filename="+outputFileName;response.setHeader("Content-Disposition",new String(exportName.getBytes(StandardCharsets.UTF_8),"ISO8859-1"));response.setContentType("application/pdf");response.setCharacterEncoding("utf-8");// 新建Document对象Document document = new Document(PageSize.A4);// 新建PdfWriter对象PdfWriter pdfWriter = PdfWriter.getInstance(document, response.getOutputStream());// 打开文档document.open();// 自定义处理base64图片final TagProcessorFactory htmlTagProcessorFactory = Tags.getHtmlTagProcessorFactory();htmlTagProcessorFactory.removeProcessor(HTML.Tag.IMG);htmlTagProcessorFactory.addProcessor(new ImageTagProcessor(),HTML.Tag.IMG);final Charset charset = StandardCharsets.UTF_8;final CssFilesImpl cssFiles = new CssFilesImpl();cssFiles.add(XMLWorkerHelper.getInstance().getDefaultCSS());final StyleAttrCSSResolver cssResolver = new StyleAttrCSSResolver(cssFiles);final HtmlPipelineContext hpc = new HtmlPipelineContext(new CssAppliersImpl(new AsianFontProvider()));hpc.setAcceptUnknown(true).autoBookmark(true).setTagFactory(htmlTagProcessorFactory);final HtmlPipeline htmlPipeline = new HtmlPipeline(hpc, new PdfWriterPipeline(document, pdfWriter));final Pipeline<?> pipeline = new CssResolverPipeline(cssResolver, htmlPipeline);final XMLWorker worker = new XMLWorker(pipeline, true);final XMLParser p = new XMLParser(true, worker, charset);// 读取html文件内容InputStream htmlInputStream = new ByteArrayInputStream(output.getBytes(charset));p.parse(htmlInputStream, charset);// 关闭文档document.close();// 关闭输入流htmlInputStream.close();// 关闭文件输出流IOUtils.closeQuietly(response.getOutputStream());}catch (IOException e) {log.error("", e);}catch (DocumentException e) {log.error("", e);}}/*** 用于中文显示的Provider*/class AsianFontProvider extends XMLWorkerFontProvider {@Overridepublic Font getFont(final String fontname, String encoding, float size, final int style) {try {BaseFont bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);return new Font(bfChinese, size, style);}catch (Exception e) {}return super.getFont(fontname, encoding, size, style);}}}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EF数据持久化(三层架构,客户增删)

效果图 点击新增按钮 点击添加 添加成功展示新增数据 点击删除&#xff0c;出现删除选项&#xff0c;点击确定根据id删除成功 成功删除 实现过程 Model设置具体流程在下面链接中 https://blog.csdn.net/Mr_wangzu/article/details/136805824?spm1001.2014.3001.5501 DAL …

棋盘问题(递推,递归)

//新生训练 #include <iostream> #include <algorithm> using namespace std; char a[10][10]; char limit[10]; int n, k; int ans 0; void dfs(int u, int cnt) {int m;if (cnt k){ans;return;}if (u > n){return;}for (int i 1; i < n; i){if (a[u][i]…

HTML静态网页成品作业(HTML+CSS)——动漫猫和老鼠网页(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…

Maxwell监听mysql的binlog日志变化写入kafka消费者

一. 环境&#xff1a; maxwell:v1.29.2 (从1.30开始maxwell停止了对java8的使用&#xff0c;改为为11) maxwell1.29.2这个版本对mysql8.0以后的缺少utf8mb3字符的解码问题&#xff0c;需要对原码中加上一个部分内容 &#xff1a;具体也给大家做了总结 &#xff1a; 关于v1.…

uniapp、vue2.6、H5,利用腾讯TRTC,快速跑通1v1视频功能

多人视频聊天室搭建&#xff0c;官网已有相关demo和案例&#xff0c;需要快速搭建多人聊天室直接进入以下网站&#xff1a; 实时音视频 Web & H5 (Vue2/Vue3)-视频通话&#xff08;含 UI&#xff09;-文档中心-腾讯云说明&#xff1a;https://cloud.tencent.com/document/…

【C语言】循环语句(语句使用建议)

文章目录 **while循环****while循环的实践****补充:if语句与while语句区别****for循环(使用频率最高)****for循环的实践****while循环和for循环的对比****Do-while循环****break和continue语句****循环的嵌套****goto语句(不常用)****循环语句的效率(来自于高质量的C/C编程书籍…

css 如何获取分辨率(使用@media查询)

在CSS中&#xff0c;可以使用media查询来应对不同的屏幕分辨率。例如&#xff0c;您可以为不同的屏幕宽度设置不同的样式规则。 /* 针对屏幕宽度小于600px的样式 */ media screen and (max-width: 599px) {body {background-color: lightblue;} }/* 针对屏幕宽度大于或等于600…

使用光标精灵更换电脑鼠标光标样式,一键安装使用

想要让自己在使用电脑时更具个性化&#xff0c;让工作和娱乐更加愉快&#xff0c;改变你的电脑指针光标皮肤可能是一个简单而有效的方法。很多人或许并不清楚如何轻松地调整电脑光标样式&#xff0c;下面我就来分享一种简单的方法。 电脑光标在系统里通常只有几种默认图案&…

流畅的 Python 第二版(GPT 重译)(一)

前言 计划是这样的&#xff1a;当有人使用你不理解的特性时&#xff0c;直接开枪打死他们。这比学习新东西要容易得多&#xff0c;不久之后&#xff0c;活下来的程序员只会用一个容易理解的、微小的 Python 0.9.6 子集来编写代码 。 Tim Peters&#xff0c;传奇的核心开发者&am…

Spring Web MVC入门(5)

响应 在我们前面的代码例子中, 都已经设置了响应数据Http响应结果可以是数据, 也可以是静态页面, 也可以针对响应设置状态码, Header信息等. 返回静态页面 创建前端页面index.html(注意路径) html代码如下: <!DOCTYPE html> <html lang"en"> <hea…

window下安装并使用nvm(含卸载node、卸载nvm、全局安装npm)

window下安装并使用nvm&#xff08;含卸载node、卸载nvm、全局安装npm&#xff09; 一、卸载node二、安装nvm三、配置路径和下载源四、使用nvm安装node五、nvm常用命令六、卸载nvm七、全局安装npm、cnpm八、遇到的问题 nvm 全名 node.js version management&#xff0c;顾名思义…

PyTorch 深度学习(GPT 重译)(二)

四、使用张量表示真实世界数据 本章内容包括 将现实世界的数据表示为 PyTorch 张量 处理各种数据类型 从文件加载数据 将数据转换为张量 塑造张量&#xff0c;使其可以作为神经网络模型的输入 在上一章中&#xff0c;我们了解到张量是 PyTorch 中数据的构建块。神经网络…

列表的循环遍历

列表的遍历 - while循环 既然数据容器可以存储多个元素&#xff0c;那么&#xff0c;就会有需求从容器内依次取出元素进行操作。 将容器内的元素依次取出进行处理的行为&#xff0c;称之为&#xff1a;遍历&#xff0c;迭代 如何遍历列表的元素呢&#xff1f; 可以使用前面…

阿里云轻量应用服务器和ECS服务器有啥区别?2024年整理对比表

阿里云服务器ECS和轻量应用服务器有什么区别&#xff1f;轻量和ECS优缺点对比&#xff0c;云服务器ECS是明星级云产品&#xff0c;适合企业专业级的使用场景&#xff0c;轻量应用服务器是在ECS的基础上推出的轻量级云服务器&#xff0c;适合个人开发者单机应用访问量不高的网站…

kubesphere all in one部署Jenkins提示1 Insufficient cpu

原因 devops 至少一个cpu&#xff08;1000m&#xff09;&#xff0c;但是其他资源已经占用了很多cpu CPU 资源以 CPU 单位度量。Kubernetes 中的一个 CPU 等同于&#xff1a; 1 个 AWS vCPU 1 个 GCP核心 1 个 Azure vCore 裸机上具有超线程能力的英特尔处理器上的 1 个超线程…

优雅的 Markdown

Markdown浅尝 一、勾选框 注意[]前后都要有空格 - [x] 干的漂亮 - [x] 吃饭 - [x] 写代码 - [ ] 睡觉 干的漂亮 吃饭 写代码 睡觉 二、列表 #无序列列表 * 换成 - 也行 * 你 * 你好 * 你好呀 - 你很好啊 你你好你好呀你很好啊 #有序列表 . 后面有个空格 1. 我 2. 是我 3.…

【Jenkins】data stream error|Error cloning remote repo ‘origin‘ 错误解决【亲测有效】

错误构建日志 17:39:09 ERROR: Error cloning remote repo origin 17:39:09 hudson.plugins.git.GitException: Command "git fetch --tags --progress http://domain/xxx.git refs/heads/*:refs/remotes/origin/*" returned status code 128: 17:39:09 stdout: 17…

CSS Module

CSS Module的作用&#xff1a;将CSS样式作用域限制在特定的组件范围内&#xff0c;以避免全局样式污染和命名冲突。 Vue中如何实现样式模块…

大数据开发--02.环境准备

一.准备三台linux虚拟机 1.分别取名node1,node2,node3 2.配置静态ip 这里以node1为例&#xff0c;配置静态ip地址&#xff0c;其他node2.node3一样 配置完成之后别忘记 systemctl restart network 3.在各自的/etc/hosts文件中编辑三个Ip地址 三台都要配置&#xff0c; 4.然…

express+mysql+vue,从零搭建一个商城管理系统16--收货地址(全国省市县名称和code列表)

提示&#xff1a;学习express&#xff0c;搭建管理系统 文章目录 前言一、新建config/area.js二、新建models/address.js三、新建dao/address.js四、新建routes/address.js五、添加地址六、查询用户地址列表总结 前言 需求&#xff1a;主要学习express&#xff0c;所以先写serv…