1. 前言
Aspose.Words for .NET 是一个类库, 它使您的应用程序能够执行大量的文档处理任务。 Aspose.Words 支持大多数流行的文档格式,例如 DOC、DOCX、RTF、HTML、Markdown、PDF、XPS、EPUB 等。 使用 Aspose.Words for .NET,您无需第三方应用程序或办公自动化即可生成、修改、转换、渲染和打印文档。 Aspose类库是商业化类库, 如需商业授权请前去官网 Aspose的基础知识点在此就不介绍了, 如需了解请前去官网 官网文档: Aspose.Words for .NET | Documentation
基本使用:
using Aspose.Words;
var baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
//var fileName = "模板";
//string extention = ".docx";
//Document doc = new Document(baseDirectory + fileName + extention);
//不是用word模板时直接new一个Document对象即可
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.Writeln("测试一下");
doc.Save(baseDirectory + "output.docx");
2. 项目中常用方法
因业务中使用的是word模板(提前根据业务处理的带有业务变量标记的文档), 需要对模板进行大量的操作, 总结了如下方法: Aspose.Word 处理文档常见业务方法
2.1 文字相关
///
/// 文字替换帮助
///
///
/// 自动使用{}扩起来
///
public static void ReplaceHelper(this Document doc, string oldString, string newString)
{
doc.Range.Replace(R("{" + oldString + "}"), newString ?? string.Empty);
}
///
/// 创建正则表达式
///
///
///
private static Regex R(string pattern)
{
return new Regex(pattern);
}
2.2 段落相关
///
/// 向节点后面插入段落
///
///
///
///
public static void InsertParagraphAfter(this DocumentBuilder documentBuilder, Node refNode, string text)
{
var doc = documentBuilder.Document;
if (documentBuilder.CurrentNode != refNode)
{
documentBuilder.MoveTo(refNode);
}
var p = documentBuilder.InsertParagraph();
Run run = new Run(doc, text);
if (refNode is Paragraph)
{
var font = ((Run)((Paragraph)refNode).Runs.FirstOrDefault())?.Font;
if (font != null)
{
run.Font.Bidi = font.Bidi;
run.Font.Color = font.Color;
run.Font.Bold = font.Bold;
run.Font.BoldBi = font.BoldBi;
run.Font.Italic = font.Italic;
run.Font.ItalicBi = font.ItalicBi;
run.Font.NoProofing = font.NoProofing;
run.Font.Outline = font.Outline;
run.Font.Scaling = font.Scaling;
run.Font.Shadow = font.Shadow;
run.Font.Size = font.Size;
run.Font.SizeBi = font.SizeBi;
run.Font.SmallCaps = font.SmallCaps;
run.Font.Spacing = font.Spacing;
run.Font.Style = font.Style;
run.Font.TextEffect = font.TextEffect;
}
}
p.AppendChild(run);
}
2.3 表格相关
///
/// 获取所有table
///
///
///
public static List GetAllTables(this Document doc)
{
NodeCollection tables = doc.GetChildNodes(NodeType.Table, true);
return tables.Select(t => (Table)t).ToList();
}
///
/// 根据索引获取table
///
///
///
///
public static Table GetTableByIndex(this Document doc, int index)
{
Table table = (Table)doc.GetChild(NodeType.Table, index, true);
return table;
}
///
/// 根据表格title获取该table
///
///
///
///
public static Table GetTableByTitle(this Document doc, string title)
{
return doc.GetAllTables().Where(p => p.Title == title).FirstOrDefault();
}
///
/// clone 表格最后一行
///
///
///
public static Row CloneLastRow(this Table table)
{
Row cloneRow = (Row)table.LastRow.Clone(true);
return cloneRow;
}
///
/// 向表格最后添加一行
///
///
///
///
public static Row AppendRow(this Table table, Row row)
{
Row r = (Row)table.AppendChild(row);
return r;
}
///
/// clone表格最后一行后添加到表格最后,返回添加的行
///
///
///
public static Row CloneLastRowAndAppend(this Table table)
{
Row r = (Row)table.AppendChild(table.CloneLastRow());
return r;
}
///
/// remove表格的某一行row
///
///
///
public static void RemoveRowByIndex(this Table table, int index)
{
table.Rows.RemoveAt(index);
}
///
/// 表格添加cell内容
///
///
/// 当前行的第i列
/// 替换文本
public static void AppendCellText(this Row row, int col, string text)
{
Cell cell = row.Cells[col];
var rs = cell.FirstParagraph.Runs;
if (rs.FirstOrDefault() is not Run rf)
{
rf = new Run(row.Document, text);
rf.Text = text;
cell.FirstParagraph.Runs.Add(rf);
}
else
{
rf.Text = text;
}
}
///
/// 水平合并表格
///
///
///
///
///
///
public static void HorizontalMerge(this Table table, int rowIndex, int colStartIndex, int colEndIndex, CellVerticalAlignment? alignment = CellVerticalAlignment.Center)
{
var mergeRow = table.Rows[rowIndex];
mergeRow.Cells[colStartIndex].CellFormat.HorizontalMerge = CellMerge.First;
if (alignment != null)
{
mergeRow.Cells[colStartIndex].CellFormat.VerticalAlignment = (CellVerticalAlignment)alignment;
}
for (int i = colStartIndex + 1; i <= colEndIndex; i++)
{
mergeRow.Cells[i].CellFormat.HorizontalMerge = CellMerge.Previous;
}
}
///
/// 数值合并表格
///
///
///
///
///
///
public static void VerticalMerge(this Table table, int colIndex, int rowStartIndex, int rowEndIndex, CellVerticalAlignment? alignment = CellVerticalAlignment.Center)
{
var rows = table.Rows;
rows[rowStartIndex].Cells[colIndex].CellFormat.VerticalMerge = CellMerge.First;
if (alignment != null)
{
rows[rowStartIndex].Cells[colIndex].CellFormat.VerticalAlignment = (CellVerticalAlignment)alignment;
}
for (int i = rowStartIndex + 1; i <= rowEndIndex; i++)
{
rows[i].Cells[colIndex].CellFormat.VerticalMerge = CellMerge.Previous;
}
}
///
/// 合并表格区域
///
///
///
///
///
///
///
public static void RangeMerge(this Table table, int colStartIndex, int colEndIndex, int rowStartIndex, int rowEndIndex, CellVerticalAlignment? alignment = CellVerticalAlignment.Center)
{
//先合并行
for (int i = rowStartIndex; i <= rowEndIndex; i++)
{
table.HorizontalMerge(i, colStartIndex, colEndIndex, alignment);
}
//再合并上一操作合并后的第一列
table.VerticalMerge(colStartIndex, rowStartIndex, rowEndIndex, alignment);
}
2.4 图片相关
///
/// 在特定paragraph下添加图片
///
/// word段落
/// 图片全路径
/// 图片宽
/// 图片高
public static void AddImage(this Paragraph paragraph, string imagePath, int width = 100, int height = 100)
{
Document doc = (Document)paragraph.Document;
Shape shape = new Shape(doc, ShapeType.Image);
shape.ImageData.SetImage(imagePath);
shape.Width = width;
shape.Height = height;
paragraph.AppendChild(shape);
}
///
/// 图片替换
///
///
/// 图片中的替换文字,作为识别该图片用
/// 图片路径
///
///
public static bool ReplaceImage(this Document doc, string imageAlternativeText, string imagePath, DocumentBuilder documentBuilder = null)
{
if (documentBuilder == null) documentBuilder = new DocumentBuilder(doc);
var shapes = doc.GetChildNodes(NodeType.Shape, true).Select(s => (Shape)s).ToList();
var imageShape = shapes.FirstOrDefault(s => s.AlternativeText == imageAlternativeText);
if (imageShape == null) return false;
documentBuilder.MoveTo(imageShape);
documentBuilder.InsertImage(imagePath, imageShape.Width, imageShape.Height);
imageShape.ParentNode.RemoveChild(imageShape);
return true;
}
2.5 其他
///
/// 删除指定范围内容
///
///
/// 标记名称
///
public static bool RemoveFlagContent(this Document doc, string flagName)
{
var flag = false;
foreach (var c in GetNodeTypeAny(doc))
{
if (c.Range.Text.StartsWith(flagName))
{
if (flag)
{
c.Remove();
break;
}
flag = true;
}
if (flag) c.Remove();
}
return true;
}
///
/// 获取所有节点
///
///
///
public static List GetNodeTypeAny(this Document doc)
{
return doc.GetChildNodes(NodeType.Any, true).ToList();
}
///
/// 删除所有标记
///
///
///
///
public static bool RemoveAllFlag(this Document doc,FieldInfo[] keys)
{
foreach (var node in GetNodeTypeAny(doc))
{
foreach (var flag in keys)
{
var value = flag.GetValue(null).ToString();
value = "{" + value + "}";
if (node.Range.Text.StartsWith(value))
{
node.Remove();
}
}
}
return true;
}
3. 关于word模板处理
3.1 文字
文字替换建议使用{replace_name}
这种带大括号的变量的方式
3.2 段落
在特定位置向下复制段落,需要先用DocumentBuilder
定位该node节点,insert一个段落,然后使用文字替换,如果有样式则应用样式.
3.3 表格
精确查找方法: 给表格属性添加可选文字, 可选文字的标题可精确定位该table,方法见GetTableByTitle
一般操作表格都是向下继续添加,所以直接复制最后一行, 然后修改表格cell文字即可达到新增行的目的
3.4 图片
精确查找方法: 右键图片编辑替换文字,替换文字内容为自定义变量, 在查找node是使用AlternativeText
属性查找即可.
3.5 其他
删除自定义段落方法,在要删除段落前后添加标记,使用doc查找所有childNodes,注意查找node的类型应为NodeType.Any
,然后删除标记索引的所有节点即可.
4. 使用Aspose.Word 的GitHub官方demo
官网github: Aspose.Words for .NET examples, plugins and showcases (github.com) 里面有对各种API的使用示例, 可下载下来查看
5. Aspose.DocumentExplorer 应用程序查看文档结构
在Aspose.Word 的GitHub官方demo仓库中已经包含了DocumentExplorer的源代码, 编译后运行可打开一个WinForm程序, 查看docx的结构类似于
6. 写在最后
基于对Aspose.Word的理解与应用的有限性, 对Aspose.Word的处理方式可能并不是最佳实践, 后续有更好的方式会继续更新, 也希望能得到各位的点评. 谢谢.
本文作者:wwmin 微信公众号: DotNet技术说 本文链接:https://www.jianshu.com/p/fa9756c6d20b 关于博主:评论和私信会在第一时间回复。或者[直接私信]我。 版权声明:转载请注明出处! 声援博主:如果您觉得文章对您有帮助,关注点赞, 您的鼓励是博主的最大动力!
你可能感兴趣的:(Aspose.Words for .NET 处理文档)
<script setup> 语法糖
前端岳大宝
前端框架Vue vue.js 前端 javascript
下面,我们来系统的梳理关于Vue3语法糖的基本知识点:一、核心概念1.1什么是?是Vue3中CompositionAPI的编译时语法糖,它通过简化组件声明方式,显著减少样板代码,提供更符合直觉的开发体验。1.2设计目标与优势目标实现方式优势减少样板代码自动暴露顶层绑定代码更简洁提升开发体验更自然的响应式写法开发更高效更好的类型支持原生TypeScript集成类型安全编译时优化编译阶段处理运行时更高
CG-05 角度传感器 转动灵敏 寿命长 可长期用在灰尘等恶劣环境
产品概述本产品采用非接触原理360度传感,机械轴传动采用两个双密封式轴承,转动灵敏度高。连接轴采用不锈钢304制造,品质出色。该产品可取代早期塑料电阻产品,寿命长,能长期使用于灰尘等恶劣环境。功能特点◆检测精度高,系统采用低功耗节能设计,数字处理技术◆量程宽,稳定性好◆数据信息显示线性度好,信号传输距离长,抗外界干扰能力强适用范围角度传感器对角度有着极强的角度分辨率,对转动的位置进行稳定的信号输出
MySQL事务深度解析:原理、优化及最佳实践
木木丰
mysql mysql 数据库 java windows
MySQL中的事务(Transaction)是数据库操作的基本单位,它代表着一组逻辑上相互关联的操作,要么全部成功,要么全部失败。这种“要么全做,要么全不做”的特性确保了数据库的完整性和一致性。事务在MySQL中扮演着至关重要的角色,特别是在处理复杂业务逻辑和并发访问时。下面将详细探讨MySQL事务的概念、使用方法、注意事项以及在实际应用中的最佳实践。一、事务的概念事务是一个不可分割的工作逻辑单元
瑞芯微RK3506工业芯片实例方案解析:从架构到场景的深度实践
淡远-九鼎创展科技
架构 嵌入式硬件 人工智能 电脑
一、芯片技术架构解析瑞芯微RK3506作为2024年第四季度推出的工业级MPU,采用三核Cortex-A7(1.5GHz)+单核Cortex-M0(200MHz)的异构架构,形成独特的"3+1"处理核心组合。这种设计通过AMP多核调度技术,实现了Linux、RTOS、Bare-metal系统的混合运行,典型配置如"2×A7运行Linux(HMI交互)+1×A7运行RTOS(协议处理)+M0裸机(实
C++程序实现阻止屏保、阻止系统自动关闭屏幕、阻止系统待机(附源码)
dvlinker
C/C++实战专栏 阻止屏保 阻止系统自动关闭屏幕 阻止系统待机 API Monitor
目录1、概述2、设置屏幕保护程序,修改自动关闭显示器和待机的时间2.1、设置屏保程序2.2、修改自动关闭显示器和待机的时间3、通过屏保的通知消息来阻止屏保4、调用API函数SystemParametersInfo关闭/启用屏保,但存在问题4.1、初步确定处理策略4.2、启动监控进程去监控主进程4.3、系统强行关机的情况无法处理5、使用APIMonitor监测到目标程序对API的调用,找到了问题的突
【鸿蒙游戏技术分享 第40期】1001860003 无效的商品信息
关键词1001860003商品管理应用内支付问题描述在游戏测试过程中,遇到商品购买报错问题"code":1001860003,"message":"BusinessError1001860003:Invalidproductinformation."问题分析1.传入的商品ID或者商品类型有误2.在AppGalleryConnect上创建的商品未提交审核或未审核通过问题处理登录AppGalleryC
PillarNet: Real-Time and High-PerformancePillar-based 3D Object Detection
justtoomuchforyou
目标检测 人工智能 计算机视觉 智驾
ECCV2022paper:[2205.07403]PillarNet:Real-TimeandHigh-PerformancePillar-based3DObjectDetectioncode:https://github.com/VISION-SJTU/PillarNet-LTS纯点云基于pillar3D检测模型网络比较SECOND基于voxel,one-stage,基于sparse3Dc
川翔云电脑全新上线:三维行业高效云端算力新选择
渲染101专业云渲染
电脑 houdini maya blender 3d 云计算
一、核心定位与优势云端虚拟工作站服务依托云端高性能CPU/GPU集群,提供远程桌面服务,支持普通设备运行专业软件。按需付费模式:无需采购高端硬件,大幅降低成本投入。生态协同优势:与渲染101同属母公司,可在云电脑中完成创作后一键提交至渲染101平台进行分布式渲染。二、硬件配置与性能参数CPU机型(侧重计算能力)GPU机型(图形渲染/AI训练)性能亮点支持最高8卡并联,显存叠加提升复杂场景处理能力。
RAG应用的评估(一)
AI老炮
AIGC ai 机器学习 人工智能 语言模型
前言上篇文档主要是对Advanced-RAG的定义、策略和适用场景做了一个细致的分析,那么当我们准备将一个基于大模型的RAG应用投入生产时,如何去判断这个RAG是否合理呢?下面有一些问题是需要提前考并应付的:LLM输出的不确定性会带来一定的不可预知性。一个RAG应用在投入生产之前需要科学的测试以衡量这种不可预知性。在LLM应用上线后的持续维护中,需要科学、快速、可复用的手段来衡量其改进效果,比如回
Java Fork/Join 框架详解
empti_
数据结构与算法 java
JavaFork/Join框架详解Fork/Join框架是Java7引入的一个并行编程框架,专门设计用来高效地实现分治算法(Divide-and-Conquer)。它通过工作窃取(Work-Stealing)算法来最大化多核处理器的利用率。一、核心概念1.基本组成ForkJoinPool:特殊的线程池,管理工作线程ForkJoinTask:表示任务的抽象类,有两个重要子类:RecursiveAct
Java注解的实现原理
empti_
Java基础 java
Java注解的实现原理Java注解的实现涉及Java语言规范、编译器处理和JVM支持等多个层面。下面我将详细解释注解在Java中的实现机制。一、注解的本质注解本质上是一种特殊的接口,所有注解类型都隐式继承自java.lang.annotation.Annotation接口。当你定义一个注解时:public@interfaceMyAnnotation{Stringvalue();}编译器实际上会生成
【网络】Linux 内核优化实战 - net.core.rmem_max
锅锅来了
Linux性能优化原理和实战 网络 linux 运维
目录参数作用与原理默认值与查看方法调整场景与方法适用场景调整方法与其他参数的协同性能影响与注意事项典型案例总结net.core.rmem_max是Linux内核中控制套接字接收缓冲区(ReceiveBuffer)最大允许值的参数。它与net.core.rmem_default(默认值)共同决定了网络数据接收的性能上限和内存使用策略。以下是详细解析:参数作用与原理核心功能:限制单个套接字接收缓冲区的
Python爬虫实战:爬取知乎问答与用户信息
Python爬虫项目
python 爬虫 php 数据分析 开发语言 开源
简介随着网络信息量的爆炸,如何有效获取有价值的内容,成为了数据分析、机器学习等领域的基础之一。爬虫作为数据采集的基本工具之一,常常被用来获取互联网上的公开数据。在这篇博客中,我们将结合最新的Python爬虫技术,详细讲解如何爬取知乎问答与用户信息。本文将会介绍:Python爬虫的基础知识知乎问答网页结构分析使用Python进行知乎数据爬取爬取知乎问答内容与用户信息如何处理和存储爬取的数据使用最新的
【网络】Linux 内核优化实战 - net.ipv4.tcp_rmem 和 net.core.rmem_default 关系
锅锅来了
Linux性能优化原理和实战 网络 linux tcp/ip
net.ipv4.tcp_rmem和net.core.rmem_default都是Linux内核中控制网络接收缓冲区的参数,但它们的作用范围、优先级和使用场景存在明显区别。以下是详细对比:核心区别参数net.ipv4.tcp_rmemnet.core.rmem_default作用协议仅针对TCP协议针对所有网络协议(TCP、UDP等)参数类型三元组:mindefaultmax单个值:默认缓冲区大小
.NET C# async/定时任务的异步线程池调度方案最大线程数 = 处理器核心数 × 250
专注VB编程开发20年
.net c# 开发语言
关于.NET中Threading.Timer的线程机制,结合线程池特性和异步协作原理分析如下:一、线程复用机制共享进程级线程池Threading.Timer的回调任务不会每次新建线程,而是提交到.NET进程全局线程池统一调度,该线程池与async/await任务共享同一资源池。线程池维护可复用工作线程队列,避免频繁创建/销毁开销任务优先由空闲线程执行,无空闲线程则进入全局队列等待线程池扩
SnowConvert:自动化数据迁移的技术解析与最佳实践
weixin_30777913
迁移学习 数据库 运维
SnowConvert是Snowflake生态系统的关键迁移工具,专为将传统数据仓库(如Oracle、Teradata、SQLServer等)的代码资产高效、准确地转换为Snowflake原生语法而设计。以下基于官方文档对其技术原理、工作流程及最佳实践进行深入分析:一、SnowConvert核心技术解析精准的语法映射引擎语言支持:深度解析源系统特有语法(OraclePL/SQL,TeradataB
AWS Lambda与RDS连接优化之旅
t0_54manong
编程问题解决手册 aws 云计算 个人开发
在云计算的时代,AWSLambda与RDS的结合为开发者提供了高效且灵活的解决方案。然而,在实际应用中,我们常常会遇到一些性能瓶颈。本文将通过一个真实案例,探讨如何优化AWSLambda与RDS之间的连接,以提高API的响应速度。背景介绍最近,我们在AWS上部署了一个使用Dotnet6开发的API,它通过APIGateway暴露给外部,并连接到同VPC内的MySQLAuroraRDS数据库。部署前
“自动化失败归因”测试集-Who&When
liliangcsdn
自动化 人工智能 语言模型
在MAS(Multi-Agent系统)中,Agent之间自主协作、信息链条长,异常常见而且诊断困难。Who&When就是测者MAS系统异常诊断的benchmark。Who&When的prompt问题来源于GAIAandAssistantBench,包含了127个LLMMulti-Agent系统中收集的异常日志,并经过系统和人工处理。Who&When样本配有如下所示的细粒度标注:“谁”(Who):哪
Linux netstat 指令
halugin
Linux指令 linux 运维
Linuxnetstat指令netstat(NetworkStatistics)是Linux系统中用于查看网络状态、连接、路由表和接口统计信息的经典命令行工具。它为系统管理员和开发人员提供了强大的网络诊断功能,帮助分析网络连接、监控流量以及排查网络问题。尽管在现代Linux系统中,netstat正在被更新的工具(如ss)部分取代,但其简单性和广泛适用性使其仍然是许多场景下的首选工具。什么是nets
Linux ss 指令
halugin
Linux指令 linux 运维
Linuxss指令ss(SocketStatistics)是Linux系统中用于显示网络套接字(socket)信息的现代命令行工具,是netstat的继任者,性能更高、输出更简洁。它提供详细的网络连接、监听端口和协议统计信息,广泛用于网络监控、故障排查和性能分析。相比传统的netstat,ss直接从内核获取数据显示更快,功能更强大,适合现代Linux系统。什么是ss指令?ss是Linux系统中的一
Spring Cloud 微服务架构部署模式
Java技术栈实战
架构 spring cloud 微服务 ai
SpringCloud微服务架构部署模式:从单体到云原生的进化路径关键词:SpringCloud、微服务架构、部署模式、容器化、Kubernetes、服务网格、DevOps摘要:本文系统解析SpringCloud微服务架构的核心部署模式,涵盖传统物理机部署、容器化部署、Kubernetes集群编排、服务网格集成等技术栈。通过技术原理剖析、实战案例演示和最佳实践总结,揭示不同部署模式的适用场景、技术
Shell 编程之正则表达式与文本处理器
目录一:正则表达式二:基础正则表达式1.基础正则表达式示例(1)查找特定字符(2)利用中括号“[]”来查找集合字符(3)查找行首“^”与行尾字符“$”(4)查找任意一个字符“.”与重复字符“*”(5)查找连续字符范围“{}”2.元字符总结3.扩展正则表达式二:文本处理器1.sed工具(1)输出符合条件的文本(p表示正常输出)(2)删除符合条件的文本(d)(3)替换符合条件的文本(4)迁移符合条件的
简单介绍物联网MQTT协议
Zio_Zhou
计算机网络 linux
在学习mqtt应用层协议之前,我们先来介绍一下发布/订阅模型以及请求/响应模型两种模型。请求/响应模型是网络应用系统中最常见的模型。在这种模型中,一个客户端(如一个Web浏览器)向服务器发送一个请求,服务器处理这个请求并返回一个响应。这个过程是同步的,意味着客户端需要等待服务器的响应。这种模型的优点是简单和易于理解,但在处理大量并发请求时可能会导致性能问题。发布/订阅模型。在这种模型中,有一个或多
VB.NET,C#字典对象来保存用户数据,支持大小写
专注VB编程开发20年
java 开发语言
用这个保存的,登录时大小写不一样会不会无法识别根据你提供的SaveUsersToJson方法,我注意到你使用了JSON序列化来保存用户数据,但没有显式指定字典的比较器。这意味着在反序列化时,默认会使用区分大小写的比较器,导致大小写不同的用户名无法正确匹配。问题分析当你保存用户数据时:PrivateSubSaveUsersToJson(usersAsDictionary(OfString,UserI
三阶落地:腾讯云Serverless+Spring Cloud的微服务实战架构
大熊计算机
# 腾讯云 架构 腾讯云 serverless
云原生演进的关键挑战(1)传统微服务架构痛点资源利用率低(非峰值期资源闲置率>60%)运维复杂度高(需管理数百个容器实例)突发流量处理能力弱(扩容延迟导致P99延迟飙升)(2)Serverless的破局价值腾讯云SCF(ServerlessCloudFunction)提供:毫秒级计费粒度(成本下降40%~70%)百毫秒级弹性伸缩(支持每秒万级并发扩容)零基础设施运维同步调用异步事件用户请求API网
RAG 调优指南:Spring AI Alibaba 模块化 RAG 原理与使用
ApacheDubbo
spring 人工智能 架构 Spring AI RAG
>夏冬,SpringAIAlibabaContributorRAG简介什么是RAG(检索增强生成)RAG(RetrievalAugmentedGeneration,检索增强生成)是一种结合信息检索和文本生成的技术范式。核心设计理念RAG技术就像给AI装上了「实时百科大脑」,通过先查资料后回答的机制,让AI摆脱传统模型的"知识遗忘"困境。️四大核心步骤1.文档切割→建立智能档案库核心任务:将海量文档
PyWavelets
shangjg3
PyTorch pytorch 人工智能 python
PyWavelets(pywt)是Python中用于小波变换的核心库,提供了丰富的信号处理和图像处理功能。以下是其核心功能的详细介绍:1.小波变换基础(1)离散小波变换(DWT)将信号分解为近似系数(Approximation)和细节系数(Detail)。importpywtimportnumpyasnp#示例信号signal=np.array([1
大数据面试必备:Kafka性能优化 Producer与Consumer配置指南
Kafka面试题-在Kafka中,如何通过配置优化Producer和Consumer的性能?回答重点在Kafka中,通过优化Producer和Consumer的配置,可以显著提高性能。以下是一些关键配置项和策略:1、Producer端优化:batch.size:批处理大小。增大batch.size可以使Producer每次发送更多的消息,但要注意不能无限制增大,否则会导致内存占用过多。linger
CBAP50技术手册】#47 Use Cases & Scenarios(用例与场景):BA(业务分析师)让需求“活起来”的剧本写作术
郭菁菁
BA 业务分析 需求分析
把需求演绎成系统与用户的真实互动剧本。在一次项目需求评审会上,开发组沉默不语,业务方焦躁不安。写在文档里的需求,似乎谁都“看懂了”,但又好像“谁都没真正理解”。直到我用一组UseCases&Scenarios把冷冰冰的需求变成了一场场“用户剧本”,大家才终于“看见”了系统该如何运作,沟通顿时顺畅了。UseCases和Scenarios,就像是BA的“剧作笔”——把抽象需求,演绎成生动细节。什么是U
Ruby 字符串(String)
froginwe11
开发语言
Ruby字符串(String)引言在编程语言中,字符串是处理文本数据的基础。Ruby作为一种动态、面向对象的语言,提供了丰富的字符串处理功能。本文将详细介绍Ruby中的字符串(String)类型,包括其基本用法、操作方法以及高级特性。字符串的基本概念在Ruby中,字符串是由一系列字符组成的序列。这些字符可以是字母、数字、标点符号等。字符串是不可变的,这意味着一旦创建,其内容就不能被修改。创建字符串
jvm调优总结(从基本概念 到 深度优化)
oloz
java jvm jdk 虚拟机 应用服务器
JVM参数详解:http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html
Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。
【Scala十六】Scala核心十:柯里化函数
bit1129
scala
本篇文章重点说明什么是函数柯里化,这个语法现象的背后动机是什么,有什么样的应用场景,以及与部分应用函数(Partial Applied Function)之间的联系 1. 什么是柯里化函数
A way to write functions with multiple parameter lists. For instance
def f(x: Int)(y: Int) is a
HashMap
dalan_123
java
HashMap在java中对很多人来说都是熟的;基于hash表的map接口的非同步实现。允许使用null和null键;同时不能保证元素的顺序;也就是从来都不保证其中的元素的顺序恒久不变。
1、数据结构
在java中,最基本的数据结构无外乎:数组 和 引用(指针),所有的数据结构都可以用这两个来构造,HashMap也不例外,归根到底HashMap就是一个链表散列的数据
Java Swing如何实时刷新JTextArea,以显示刚才加append的内容
周凡杨
java 更新 swing JTextArea
在代码中执行完textArea.append("message")后,如果你想让这个更新立刻显示在界面上而不是等swing的主线程返回后刷新,我们一般会在该语句后调用textArea.invalidate()和textArea.repaint()。
问题是这个方法并不能有任何效果,textArea的内容没有任何变化,这或许是swing的一个bug,有一个笨拙的办法可以实现
servlet或struts的Action处理ajax请求
g21121
servlet
其实处理ajax的请求非常简单,直接看代码就行了:
//如果用的是struts
//HttpServletResponse response = ServletActionContext.getResponse();
// 设置输出为文字流
response.setContentType("text/plain");
// 设置字符集
res
FineReport的公式编辑框的语法简介
老A不折腾
finereport 公式 总结
FINEREPORT用到公式的地方非常多,单元格(以=开头的便被解析为公式),条件显示,数据字典,报表填报属性值定义,图表标题,轴定义,页眉页脚,甚至单元格的其他属性中的鼠标悬浮提示内容都可以写公式。
简单的说下自己感觉的公式要注意的几个地方:
1.if语句语法刚接触感觉比较奇怪,if(条件式子,值1,值2),if可以嵌套,if(条件式子1,值1,if(条件式子2,值2,值3)
linux mysql 数据库乱码的解决办法
墙头上一根草
linux mysql 数据库乱码
linux 上mysql数据库区分大小写的配置
lower_case_table_names=1 1-不区分大小写 0-区分大小写
修改/etc/my.cnf 具体的修改内容如下:
[client]
default-character-set=utf8
[mysqld]
datadir=/var/lib/mysql
socket=/va
我的spring学习笔记6-ApplicationContext实例化的参数兼容思想
aijuans
Spring 3
ApplicationContext能读取多个Bean定义文件,方法是:
ApplicationContext appContext = new ClassPathXmlApplicationContext(
new String[]{“bean-config1.xml”,“bean-config2.xml”,“bean-config3.xml”,“bean-config4.xml
mysql 基准测试之sysbench
annan211
基准测试 mysql基准测试 MySQL测试 sysbench
1 执行如下命令,安装sysbench-0.5:
tar xzvf sysbench-0.5.tar.gz
cd sysbench-0.5
chmod +x autogen.sh
./autogen.sh
./configure --with-mysql --with-mysql-includes=/usr/local/mysql
sql的复杂查询使用案列与技巧
百合不是茶
oracle sql 函数 数据分页 合并查询
本片博客使用的数据库表是oracle中的scott用户表;
------------------- 自然连接查询
查询 smith 的上司(两种方法)
&
深入学习Thread类
bijian1013
java thread 多线程 java多线程
一. 线程的名字
下面来看一下Thread类的name属性,它的类型是String。它其实就是线程的名字。在Thread类中,有String getName()和void setName(String)两个方法用来设置和获取这个属性的值。
同时,Thr
JSON串转换成Map以及如何转换到对应的数据类型
bijian1013
java fastjson net.sf.json
在实际开发中,难免会碰到JSON串转换成Map的情况,下面来看看这方面的实例。另外,由于fastjson只支持JDK1.5及以上版本,因此在JDK1.4的项目中可以采用net.sf.json来处理。
一.fastjson实例
JsonUtil.java
package com.study;
impor
【RPC框架HttpInvoker一】HttpInvoker:Spring自带RPC框架
bit1129
spring
HttpInvoker是Spring原生的RPC调用框架,HttpInvoker同Burlap和Hessian一样,提供了一致的服务Exporter以及客户端的服务代理工厂Bean,这篇文章主要是复制粘贴了Hessian与Spring集成一文,【RPC框架Hessian四】Hessian与Spring集成
在
【RPC框架Hessian二】Hessian 对象序列化和反序列化一文中
【Mahout二】基于Mahout CBayes算法的20newsgroup的脚本分析
bit1129
Mahout
#!/bin/bash
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information re
nginx三种获取用户真实ip的方法
ronin47
随着nginx的迅速崛起,越来越多公司将apache更换成nginx. 同时也越来越多人使用nginx作为负载均衡, 并且代理前面可能还加上了CDN加速,但是随之也遇到一个问题:nginx如何获取用户的真实IP地址,如果后端是apache,请跳转到<apache获取用户真实IP地址>,如果是后端真实服务器是nginx,那么继续往下看。
实例环境: 用户IP 120.22.11.11
java-判断二叉树是不是平衡
bylijinnan
java
参考了
http://zhedahht.blog.163.com/blog/static/25411174201142733927831/
但是用java来实现有一个问题。
由于Java无法像C那样“传递参数的地址,函数返回时能得到参数的值”,唯有新建一个辅助类:AuxClass
import ljn.help.*;
public class BalancedBTree {
BeanUtils.copyProperties VS PropertyUtils.copyProperties
诸葛不亮
PropertyUtils BeanUtils
BeanUtils.copyProperties VS PropertyUtils.copyProperties
作为两个bean属性copy的工具类,他们被广泛使用,同时也很容易误用,给人造成困然;比如:昨天发现同事在使用BeanUtils.copyProperties copy有integer类型属性的bean时,没有考虑到会将null转换为0,而后面的业
[金融与信息安全]最简单的数据结构最安全
comsci
数据结构
现在最流行的数据库的数据存储文件都具有复杂的文件头格式,用操作系统的记事本软件是无法正常浏览的,这样的情况会有什么问题呢?
从信息安全的角度来看,如果我们数据库系统仅仅把这种格式的数据文件做异地备份,如果相同版本的所有数据库管理系统都同时被攻击,那么
vi区段删除
Cwind
linux vi 区段删除
区段删除是编辑和分析一些冗长的配置文件或日志文件时比较常用的操作。简记下vi区段删除要点备忘。
vi概述
引文中并未将末行模式单独列为一种模式。单不单列并不重要,能区分命令模式与末行模式即可。
vi区段删除步骤:
1. 在末行模式下使用:set nu显示行号
非必须,随光标移动vi右下角也会显示行号,能够正确找到并记录删除开始行
清除tomcat缓存的方法总结
dashuaifu
tomcat 缓存
用tomcat容器,大家可能会发现这样的问题,修改jsp文件后,但用IE打开 依然是以前的Jsp的页面。
出现这种现象的原因主要是tomcat缓存的原因。
解决办法如下:
在jsp文件头加上
<meta http-equiv="Expires" content="0"> <meta http-equiv="kiben&qu
不要盲目的在项目中使用LESS CSS
dcj3sjt126com
Web less
如果你还不知道LESS CSS是什么东西,可以看一下这篇文章,是我一朋友写给新人看的《CSS——LESS》
不可否认,LESS CSS是个强大的工具,它弥补了css没有变量、无法运算等一些“先天缺陷”,但它似乎给我一种错觉,就是为了功能而实现功能。
比如它的引用功能
?
.rounded_corners{
[入门]更上一层楼
dcj3sjt126com
PHP yii2
更上一层楼
通篇阅读完整个“入门”部分,你就完成了一个完整 Yii 应用的创建。在此过程中你学到了如何实现一些常用功能,例如通过 HTML 表单从用户那获取数据,从数据库中获取数据并以分页形式显示。你还学到了如何通过 Gii 去自动生成代码。使用 Gii 生成代码把 Web 开发中多数繁杂的过程转化为仅仅填写几个表单就行。
本章将介绍一些有助于更好使用 Yii 的资源:
Apache HttpClient使用详解
eksliang
httpclient http协议
Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且也方便了开发人员测试接口(基于Http协议的),即提高了开发的效率,也方便提高代码的健壮性。因此熟练掌握HttpClient是很重要的必修内容,掌握HttpClient后,相信对于Http协议的了解会
zxing二维码扫描功能
gundumw100
android zxing
经常要用到二维码扫描功能
现给出示例代码
import com.google.zxing.WriterException;
import com.zxing.activity.CaptureActivity;
import com.zxing.encoding.EncodingHandler;
import android.app.Activity;
import an
纯HTML+CSS带说明的黄色导航菜单
ini
html Web html5 css hovertree
HoverTree带说明的CSS菜单:纯HTML+CSS结构链接带说明的黄色导航
在线体验效果:http://hovertree.com/texiao/css/1.htm代码如下,保存到HTML文件可以看到效果:
<!DOCTYPE html >
<html >
<head>
<title>HoverTree
fastjson初始化对性能的影响
kane_xie
fastjson 序列化
之前在项目中序列化是用thrift,性能一般,而且需要用编译器生成新的类,在序列化和反序列化的时候感觉很繁琐,因此想转到json阵营。对比了jackson,gson等框架之后,决定用fastjson,为什么呢,因为看名字感觉很快。。。
网上的说法:
fastjson 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,来自阿里巴巴的工程师开发。
基于Mybatis封装的增删改查实现通用自动化sql
mengqingyu
DAO
1.基于map或javaBean的增删改查可实现不写dao接口和实现类以及xml,有效的提高开发速度。
2.支持自定义注解包括主键生成、列重复验证、列名、表名等
3.支持批量插入、批量更新、批量删除
<bean id="dynamicSqlSessionTemplate" class="com.mqy.mybatis.support.Dynamic
js控制input输入框的方法封装(数字,中文,字母,浮点数等)
qifeifei
javascript js
在项目开发的时候,经常有一些输入框,控制输入的格式,而不是等输入好了再去检查格式,格式错了就报错,体验不好。 /** 数字,中文,字母,浮点数(+/-/.) 类型输入限制,只要在input标签上加上 jInput="number,chinese,alphabet,floating" 备注:floating属性只能单独用*/
funct
java 计时器应用
tangqi609567707
java timer
mport java.util.TimerTask; import java.util.Calendar; public class MyTask extends TimerTask { private static final int
erlang输出调用栈信息
wudixiaotie
erlang
在erlang otp的开发中,如果调用第三方的应用,会有有些错误会不打印栈信息,因为有可能第三方应用会catch然后输出自己的错误信息,所以对排查bug有很大的阻碍,这样就要求我们自己打印调用的栈信息。用这个函数:erlang:process_display (self (), backtrace).需要注意这个函数只会输出到标准错误输出。
也可以用这个函数:erlang:get_s