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

java使用freemarker模板生成html,再生成pdf

1.freemarker模板生成html

  1. 添加Maven依赖

在pom.xml文件中添加以下依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
  1. 创建Freemarker模板

新建一个HTML文件,例如table.ftl,然后在其中编写HTML模板,包括表格的头部、内容和尾部等部分。具体可以参考下面这个例子:

<table border="1"><thead><tr><th>ID</th><th>Name</th><th>Age</th></tr></thead><tbody><#list users as user><tr><td>${user.id}</td><td>${user.name}</td><td>${user.age}</td></tr></#list></tbody>
</table>

上面的模板中使用了Freemarker的指令语法来实现动态生成表格内容,包括使用<#list>标签来遍历用户列表,并使用${}语法来输出用户信息。

  1. 创建Controller方法

在Controller中编写一个方法来获取用户列表,然后渲染上面的模板并返回HTML内容。示例代码如下:

@Controller
public class UserController {@GetMapping("/users")public String userList(Model model) {List<User> users = new ArrayList<>();users.add(new User(1, "Tom", 18));users.add(new User(2, "Jerry", 20));users.add(new User(3, "John", 22));model.addAttribute("users", users);return "table";}
}

上面的方法使用@GetMapping注解来处理请求,然后创建一个用户列表,并将其添加到模型中。最后返回table字符串,代表要使用的HTML模板文件。

  1. 运行项目

运行Spring Boot应用程序,然后使用浏览器访问http://localhost:8080/users,即可看到动态生成的HTML表格。

注意:上面的例子仅供参考,实际应用中需要根据自己的需求进行修改扩展。

2.利用iText将生成的HTML转换为PDF文件

理解了freemarker生成html的步骤以后,就可以利用iText把html生成pdf文件了。

  1. 编写转换代码
    添加Maven依赖
    在pom.xml文件中添加以下依赖:
<dependency>
<groupId>com.itextpdf.tool</groupId><artifactId>xmlworker</artifactId><version>5.5.1</version>
</dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version>
</dependency><!-- 支持css样式渲染 -->
<dependency><groupId>org.xhtmlrenderer</groupId><artifactId>flying-saucer-pdf-itext5</artifactId><version>9.0.9</version>
</dependency>
  1. 编写转换代码
    在SpringBoot应用程序中创建一个Service或者Controller类,然后编写HTML转PDF的代码。

freeMarker转换为html的方法:

public class HtmlGenerator {public static String generate(String template, Map<String, Object> variables) throws IOException, TemplateException, IOException {Configuration config = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);// 指定FreeMarker模板文件的位置config.setClassForTemplateLoading(HtmlGenerator.class, "/filePath");//读取模板文件地址config.setDefaultEncoding("UTF-8");//获取模板文件Template tp = config.getTemplate(template);StringWriter stringWriter = new StringWriter();BufferedWriter writer = new BufferedWriter(stringWriter);tp.setEncoding("UTF-8");//把map数据写入tp.process(variables, writer);String htmlStr = stringWriter.toString();writer.flush();writer.close();return htmlStr;}
}

/filePath为项目中的ftl文件相对路径。
html生成pdf的方法:

public class PdfDocumentGenerator {private static final Logger logger = LoggerFactory.getLogger(PdfDocumentGenerator.class);/*** Output a pdf to the specified outputstream* * @param htmlStr*            the htmlstr* @param out*            the specified outputstream* @throws Exception*/public static void generate(String htmlStr, OutputStream out)throws Exception {DocumentBuilderFactory df = DocumentBuilderFactory.newInstance();df.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, ""); // Compliantdf.setAttribute(XMLConstants.ACCESS_EXTERNAL_SCHEMA, ""); // compliantDocumentBuilder builder = df.newDocumentBuilder();org.w3c.dom.Document doc = builder.parse(new ByteArrayInputStream(htmlStr.getBytes()));ITextRenderer renderer = new ITextRenderer();renderer.setDocument(doc, null);renderer.layout();renderer.createPDF(out);out.close();}public static void generatePlus(String htmlStr, OutputStream out) throws IOException, DocumentException {final String charsetName = "UTF-8";Document document = new Document(PageSize.A4, 30, 30, 30, 30);document.setMargins(30, 30, 30, 30);PdfWriter writer = PdfWriter.getInstance(document, out);document.open();// html内容解析HtmlPipelineContext htmlContext = new HtmlPipelineContext(new CssAppliersImpl(new XMLWorkerFontProvider() {@Overridepublic Font getFont(String fontname, String encoding,float size, final int style) {if (fontname == null) {fontname = getChineseFont();      }return super.getFont(fontname, encoding, size,style);}})) {@Overridepublic HtmlPipelineContext clone()throws CloneNotSupportedException {HtmlPipelineContext context = super.clone();try {ImageProvider imageProvider = this.getImageProvider();context.setImageProvider(imageProvider);} catch (NoImageProviderException e) {}return context;}};// 图片解析htmlContext.setImageProvider(new AbstractImageProvider() {String rootPath = PdfDocumentGenerator.class.getResource("/").getPath();@Overridepublic String getImageRootPath() {return rootPath;}@Overridepublic Image retrieve(String src) {if (StringUtils.isEmpty(src)) {return null;}try {Image image = Image.getInstance(new File(rootPath, src).toURI().toString());// 图片显示位置image.setAbsolutePosition(400, 400);		if (image != null) {store(src, image);return image;}} catch (Throwable e) {e.printStackTrace();}return super.retrieve(src);}});htmlContext.setAcceptUnknown(true).autoBookmark(true).setTagFactory(Tags.getHtmlTagProcessorFactory());// css解析CSSResolver cssResolver = XMLWorkerHelper.getInstance().getDefaultCssResolver(true);cssResolver.setFileRetrieve(new FileRetrieve() {@Overridepublic void processFromStream(InputStream in,ReadingProcessor processor) throws IOException {try (InputStreamReader reader = new InputStreamReader(in, charsetName)) {int i = -1;while (-1 != (i = reader.read())) {processor.process(i);}} catch (Throwable e) {}}// 解析href@Overridepublic void processFromHref(String href, ReadingProcessor processor) throws IOException {InputStream is = PdfDocumentGenerator.class.getResourceAsStream("/" + href);try (InputStreamReader reader = new InputStreamReader(is,charsetName)) {int i = -1;while (-1 != (i = reader.read())) {processor.process(i);}} catch (Throwable e) {e.printStackTrace();}}});HtmlPipeline htmlPipeline = new HtmlPipeline(htmlContext, new PdfWriterPipeline(document, writer));Pipeline<?> pipeline = new CssResolverPipeline(cssResolver, htmlPipeline);XMLWorker worker = null;worker = new XMLWorker(pipeline, true);XMLParser parser = new XMLParser(true, worker, Charset.forName(charsetName));try (InputStream inputStream = new ByteArrayInputStream(htmlStr.getBytes())) {parser.parse(inputStream, Charset.forName(charsetName));}document.close();}/*** 获取中文字体位置 * @return*/public static String getChineseFont() {String chineseFont = null;chineseFont = Object.class.getResource("/").getPath() + "font/simsun.ttc";if(!new File(chineseFont).exists()){throw new RuntimeException("字体文件不存在!"+chineseFont);}return chineseFont;}
}

运行测试方法:

public class Pdfdest {public static void main(String[] args) throws Exception {String outputFile = "d:/test1.pdf";Map<String, Object> map = new HashMap<>();map.put("XXX", "测试");//生成工具,下面有代码String htmlStr = HtmlGenerator.generate("test.ftl", map);//生成工具,下面有代码OutputStream out = new FileOutputStream(outputFile);PdfDocumentGenerator.generatePlus(htmlStr,out);}
}

准备一个test.ftl放到resource/filePath下,当然字体最好也放到resource/font下,运行时需要使用。
test.ftl的代码如下:

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"></meta><style>@page {@top-center { content: element(header) }}@page {@bottom-center { content: element(footer) }}.apply {margin: 0 auto;padding: 0 30px;}.title {margin-top: 40px ;text-align: center;font-weight: bold;//字体需要和后台对应上font-family: SimSun;font-weight: bold;font-size: 20px;color: #333333;letter-spacing: 0;}.table {border-collapse: collapse;width: 100%;margin-top: 30px;font-family: SimSun;font-size: 14px;color: #111111;letter-spacing: 0.54px;}.label {background-color: #E6E6E6;width: 20%;}.normaltd {padding: 10px 0;}.maxtd {height: 250px;}.value {width: 30%;padding-left: 10px;}.apply {margin: 0 auto;padding: 0 30px;}.title {margin-top: 40px ;text-align: center;font-weight: bold;//字体需要和后台对应上font-family: SimSun;font-weight: bold;font-size: 20px;color: #333333;letter-spacing: 0;}.table {width: 100%;margin-top: 30px;font-family: SimSun;font-size: 14px;color: #111111;letter-spacing: 0.54px;}.label {background-color: #E6E6E6;width: 20%;}.normaltd {padding: 10px 0;}.maxtd {height: 250px;}.value {width: 30%;padding-left: 10px;}tr {page-break-inside: avoid;page-break-after: auto;}</style>
</head><body style="font-family: SimSun">
<div class="apply"><p class="title">申请单</p><table border="1" cellspacing="0" class="table"><tr><td class="label normaltd" align="center">XXX</td><td class="normaltd value">${XXX}</td><td class="label normaltd" align="center">XXX</td><td class="normaltd value">${XXX}</td></tr><tr><td class="label normaltd" align="center">XXX</td><td class="normaltd value">${XXX}</td><td class="label normaltd" align="center">XXX</td><td class="normaltd value">${XXX}</td></tr><tr><td class="label" align="center">XXX</td><td class="normaltd value">${XXX}</td><td class="label normaltd" align="center">XXX</td><td class="normaltd value">${XXX}</td></tr><tr><td class="label normaltd" align="center">XXX</td><td class="normaltd value">XXX</td><td class="label normaltd" align="center">XXX</td><td class="normaltd value">${XXX}</td></tr><tr><td class="label normaltd" align="center">XXX</td><td class="normaltd value">${XXX}</td><td class="label normaltd" align="center">XXX</td><td class="normaltd value">${XXX}</td></tr><tr ><td valign="middle" colspan="1" class="label maxtd" align="center">XXX</td><td valign="middle" colspan="3" class="maxtd value">${XXX}</td></tr><tr><td colspan="1" class="label normaltd" align="center">XXX</td><td colspan="3" class="normaltd value">${XXX}</td></tr><tr><td colspan="1" class="label normaltd" align="center">XXX</td><td colspan="3" class="normaltd value">${XXX}</td></tr><tr><td colspan="1" class="label normaltd" align="center">XXX</td><td colspan="3" class="normaltd value">${XXX}</td></tr><tr><td class="label normaltd" align="center">XXX</td><td class="normaltd value">${XXX}</td><td class="label normaltd" align="center">XXX</td><td class="normaltd value">${XXX}</td></tr><tr><td class="label normaltd" align="center">XXX</td><td class="normaltd value">${XXX}</td><td class="label normaltd" align="center">XXX</td><td class="normaltd value">${XXX}</td></tr><tr><td class="label" align="center">XXX</td><td class="normaltd value">${XXX}</td><td class="label normaltd" align="center">XXX</td><td class="normaltd value">${XXX}</td></tr><tr><td class="label normaltd" align="center">XXX</td><td class="normaltd value">XXX</td><td class="label normaltd" align="center">XXX</td><td class="normaltd value">${XXX}</td></tr><tr><td class="label normaltd" align="center">XXX</td><td class="normaltd value">${XXX}</td><td class="label normaltd" align="center">XXX</td><td class="normaltd value">${XXX}</td></tr><tr ><td valign="middle" colspan="1" class="label maxtd" align="center">XXX</td><td valign="middle" colspan="3" class="maxtd value">${XXX}</td></tr><tr><td colspan="1" class="label normaltd" align="center">XXX</td><td colspan="3" class="normaltd value">${XXX}</td></tr><tr><td colspan="1" class="label normaltd" align="center">XXX</td><td colspan="3" class="normaltd value">${XXX}</td></tr><tr><td colspan="1" class="label normaltd" align="center">XXX</td><td colspan="3" class="normaltd value">${XXX}</td></tr><tr><td class="label normaltd" align="center">XXX</td><td class="normaltd value">${XXX}</td><td class="label normaltd" align="center">XXX</td><td class="normaltd value">${XXX}</td></tr><tr><td class="label normaltd" align="center">XXX</td><td class="normaltd value">${XXX}</td><td class="label normaltd" align="center">XXX</td><td class="normaltd value">${XXX}</td></tr><tr><td class="label" align="center">XXX</td><td class="normaltd value">${XXX}</td><td class="label normaltd" align="center">XXX</td><td class="normaltd value">${XXX}</td></tr><tr><td class="label normaltd" align="center">XXX</td><td class="normaltd value">XXX</td><td class="label normaltd" align="center">XXX</td><td class="normaltd value">${XXX}</td></tr><tr><td class="label normaltd" align="center">XXX</td><td class="normaltd value">${XXX}</td><td class="label normaltd" align="center">XXX</td><td class="normaltd value">${XXX}</td></tr></table>
</div>
</body>
</html>

执行就可以看到生成的pdf文件了,文件路径在d:/test1.pdf。

相关文章:

java使用freemarker模板生成html,再生成pdf

1.freemarker模板生成html 添加Maven依赖 在pom.xml文件中添加以下依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId> </dependency>创建Freemarker…...

图解系列--Web服务器,Http首部

1.用单台虚拟主机实现多个域名 HTTP/1.1 规范允许一台 HTTP 服务器搭建多个 Web 站点。。比如&#xff0c;提供 Web 托管服务&#xff08;Web Hosting Service&#xff09;的供应商&#xff0c;可以用一台服务器为多位客户服务&#xff0c;也可以以每位客户持有的域名运行各自不…...

直线(蓝桥杯)

直线 题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 在平面直角坐标系中&#xff0c;两点可以确定一条直线。如果有多点在一条直线上&#xff0c; 那么这些点中任意两点确定的直线是同一条。 给定平面上 2 3 个…...

Android:从源码看FragmentManager如何工作

一个Activity中&#xff0c;在某一个容器中&#xff0c;更换不同的Fragment&#xff0c;从而显示不同的界面&#xff0c;这个场景相信大家已经非常熟悉了&#xff0c;也知道Activity是通过FragmentManager来管理嵌入的Fragments的&#xff0c;所以今天就来看看FragmentManager是…...

LabVIEW通过编程将图形类控件的X轴显示为时间戳

LabVIEW通过编程将图形类控件的X轴显示为时间戳 每个版本的LabVIEW中都有属性节点&#xff0c;可以以编程方式调整X轴和Y轴格式。对于不同版本的LabVIEW&#xff0c;这些属性节点无法在同一个位置找到。请参阅以下部分&#xff0c;了解特定版本LabVIEW的相关属性节点的位置。 …...

Spring Boot进行单元测试,一个思路解决重启低效难题!

所谓单元测试就是对功能最小粒度的测试&#xff0c;落实到JAVA中就是对单个方法的测试。 junit可以完成单个方法的测试&#xff0c;但是对于Spring体系下的web应用的单元测试是无能为力的。因为spring体系下的web应用都采用了MVC三层架构&#xff0c;依托于IOC&#xff0c;层级…...

c/c++ header_only 头文件实现的关键点

header_only 头文件实现的关键点 ------------------------------------------------------------------------- author: hjjdebug date: 2023年 11月 28日 星期二 16:58:38 CST descriptor: header_only 头文件实现的关键点1. 对外声明的函数必需加上inline, 消除连接的歧义…...

Linux(CentOS7.5):通过docker安装redis

一、准备配置文件 在宿主机&#xff0c;准备映射配置文件的目录下&#xff0c;运行如下&#xff1a; wget http://download.redis.io/redis-stable/redis.conf二、安装 docker run \ --restartalways \ --log-opt max-size100m \ --log-opt max-file2 \ -p 6380:6379 \ -v /opt…...

唯创知音WT588F02B-8S语音芯片:灵活更换语音内容,降低开发成本与备货压力

在电子产品的开发阶段&#xff0c;语音芯片的选择与使用对于产品的功能、成本和上市时间都有着重要影响。唯创知音的WT588F02B-8S语音芯片以其独特的优势&#xff0c;成为工程师们的理想选择&#xff0c;尤其在样品阶段&#xff0c;它为工程师提供了自行更换语音内容的便利&…...

git的创建以及使用

1、上传本地仓库 首先确定项目根目录中没有.git文件&#xff0c;有的话就删了&#xff0c;没有就下一步。在终端中输入git init命令。注意必须是根目录&#xff01; 将代码存到暂存区 将代码保存到本地仓库 2、创建git仓库 仓库名称和路径&#xff08;name&#xff09;随便写…...

面试笔记--Linux常用命令

文件和目录操作&#xff1a; ls: 列出目录内容 例子&#xff1a;ls -l - 列出详细信息&#xff0c;包括权限、所有者等 cd: 切换目录 例子&#xff1a;cd Documents - 进入 “Documents” 目录 pwd: 显示当前工作目录 例子&#xff1a;pwd - 显示当前工作目录的路径 cp: 复制文…...

【小黑嵌入式系统第十课】μC/OS-III概况——实时操作系统的特点、基本概念(内核任务中断)、与硬件的关系实现

文章目录 一、为什么要学习μC/OS-III二、嵌入式操作系统的发展历史三、实时操作系统的特点四、基本概念1. 前后台系统2. 操作系统3. 实时操作系统&#xff08;RTOS&#xff09;4. 内核5. 任务6. 任务优先级7. 任务切换8. 调度9. 非抢占式&#xff08;合作式&#xff09;内核10…...

在easyswoole 中,配置文件如何加载外部配置

在一个项目中 目录结构是这样的 网站的公共配置&#xff0c;包括一些数据库连接配置&#xff0c;redis连接配置 /web/config/redis_config.php/web/config/mysql_config.php 下面是Easyswoole 项目目录 所有的配置均放在ES项目中的Config目录中 文件名且采用大驼峰命名。如…...

小程序微信支付API?以及参数有哪些

微信小程序支付API有两个&#xff0c;分别是 wx.chooseWXPay 和 wx.pay。 wx.chooseWXPay 是用于唤起微信支付的API&#xff0c;它支持扫码支付、JSAPI支付、APP支付等。它返回一个Promise对象&#xff0c;可以在then方法中处理支付结果。 wx.pay 是用于发起微信支付的API&am…...

【算法】一个简单的整数问题(树状数组、差分)

题目 给定长度为 N 的数列 A&#xff0c;然后输入 M 行操作指令。 第一类指令形如 C l r d&#xff0c;表示把数列中第 l∼r 个数都加 d。 第二类指令形如 Q x&#xff0c;表示询问数列中第 x 个数的值。 对于每个询问&#xff0c;输出一个整数表示答案。 输入格式 第一行…...

Android flutter项目 启动优化实战(二)利用 App Startup 优化项目和使用flutterboost中的问题解决

背景 书接上回&#xff1a; Android flutter项目 启动优化实战&#xff08;一&#xff09;使用benchmark分析项目 已经分析出了问题: 1.缩短总时长&#xff08;解决黑屏问题、懒启动、优化流程&#xff09;、2.优化启动项&#xff08;使用App Startup&#xff09;、3.提升用…...

Java---权限修饰符、final、static

文章目录 1. 权限修饰符2. final(最终态)3. static(静态) 1. 权限修饰符 修饰符同一个类中同一个包中的子类和无关类不同包的子类不同包的无关类private√默认√√protected√√√public√√√√ 2. final(最终态) 1. final关键字是最终的意思&#xff0c;可以修饰成员方法、…...

unity实时保存对象的位姿,重新运行程序时用最后保存的数据给物体赋值

using UnityEngine; using System.IO; // using System.Xml.Serialization; public class SaveCoordinates : MonoBehaviour {public GameObject MainObject;//读取坐标private float x;private float y;private float z;private Quaternion quaternion;private void Start(){/…...

【Java Spring】Spring MVC基础

文章目录 1、Spring MVC 简介2、Spring MVC 功能1.1 Spring MVC 连接功能2.2 Spring MVC 获取参数2.2.1 获取变量2.2.2 获取对象2.2.3 RequestParam重命名后端参数2.2.4 RequestBody 接收Json对象2.2.5 PathVariable从URL中获取参数 1、Spring MVC 简介 Spring Web MVC是构建于…...

MES系统的功能清单

MES系统的功能清单 一、生产计划管理 1. 订单和生产计划制定&#xff1a;根据客户需求和市场状况&#xff0c;制定生产计划和订单&#xff0c;确保生产资源的合理分配和生产进度的有效管理。 2. 生产排程&#xff1a;根据生产计划和订单&#xff0c;结合设备、人员、物料等资…...

ARM PMU外部接口与性能监控寄存器详解

1. ARM性能监控寄存器外部接口深度解析性能监控单元(PMU)是现代处理器架构中用于硬件性能分析的核心模块&#xff0c;它通过一组可编程计数器实时捕获处理器微架构层面的各类事件。在ARMv8/v9架构中&#xff0c;PMU不仅可以通过系统寄存器访问&#xff0c;还提供了标准化的外部…...

新手村任务:成为一个架构师需要哪些装备?

新手村任务:成为一个架构师需要哪些装备? 一、前言 如果你刚入行不久,想成为一名架构师,那这篇文章就是为你写的。 我们把成为架构师比作一个RPG游戏,你是主角,需要收集各种装备、刷经验、升级技能。 新手村的第一个任务就是:了解你需要哪些装备。 二、架构师技能树…...

为什么你的DeepSeek微调loss震荡不止?(Meta/DeepSeek联合团队未公开的梯度裁剪+LoRA初始化双校准协议)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;DeepSeek微调loss震荡的根本归因剖析 DeepSeek系列模型在微调过程中频繁出现loss剧烈震荡现象&#xff0c;其本质并非单一因素所致&#xff0c;而是数据、优化器、梯度动态与模型结构四者耦合失稳的系统性表现…...

基于TESS光变曲线与深度学习的O型星物理参数预测研究

1. 项目概述与核心挑战在恒星天体物理研究中&#xff0c;大质量O型星扮演着至关重要的角色。它们不仅是宇宙中光度最高的天体之一&#xff0c;其强烈的辐射、恒星风和最终的超新星爆发&#xff0c;更是驱动星系化学演化和能量注入星际介质的关键引擎。然而&#xff0c;深入理解…...

LDBlockShow实战指南:基因组连锁不平衡分析与可视化解决方案

LDBlockShow实战指南&#xff1a;基因组连锁不平衡分析与可视化解决方案 【免费下载链接】LDBlockShow LDBlockShow: a fast and convenient tool for visualizing linkage disequilibrium and haplotype blocks based on VCF files 项目地址: https://gitcode.com/gh_mirror…...

UE5 Cesium项目里,如何把默认的飞行Pawn换成建筑漫游Pawn?保姆级迁移教程

UE5 Cesium项目建筑漫游Pawn迁移实战&#xff1a;从飞行模式到精细化浏览的完整指南当你在UE5中结合Cesium插件构建数字孪生场景时&#xff0c;DynamicPawn提供的全球飞行体验令人印象深刻。但当视角聚焦到单体建筑或室内空间时&#xff0c;那种仿佛操控无人机般的操作方式就显…...

别再死记硬背公式了!用UE5的Lerp节点玩转材质混合(附灰度图实战案例)

别再死记硬背公式了&#xff01;用UE5的Lerp节点玩转材质混合&#xff08;附灰度图实战案例&#xff09;在游戏开发中&#xff0c;材质混合是创造丰富视觉效果的关键技术。对于Unreal Engine 5的初学者来说&#xff0c;LinearInterpolate&#xff08;简称Lerp&#xff09;节点可…...

i茅台自动预约系统:告别手动抢购,5分钟搭建智能预约平台

i茅台自动预约系统&#xff1a;告别手动抢购&#xff0c;5分钟搭建智能预约平台 【免费下载链接】campus-imaotai i茅台app自动预约&#xff0c;每日自动预约&#xff0c;支持docker一键部署&#xff08;本项目不提供成品&#xff0c;使用的是已淘汰的算法&#xff09; 项目地…...

Wand-Enhancer终极指南:三步免费解锁WeMod专业版所有功能

Wand-Enhancer终极指南&#xff1a;三步免费解锁WeMod专业版所有功能 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer 还在为WeMod免费版的限制而烦恼吗&…...

数据预处理实战:缺失值、噪声与归一化处理的核心技术与Python实现

1. 项目概述&#xff1a;为什么数据预处理是模型成败的“胜负手” 在数据科学和机器学习的实战中&#xff0c;我见过太多团队将80%的精力投入到模型调参和算法选型上&#xff0c;却对数据预处理草草了事。结果往往是&#xff0c;一个理论上精妙的模型&#xff0c;因为“喂”进去…...