Java使用spire.doc操作word文档(合并、插入文字图片和表格、替换书签)

一、引入依赖

<dependency><groupId>e-iceblue</groupId><artifactId>spire.office</artifactId><version>7.5.4</version>
</dependency>

二、word操作

1、合并word文档

import com.spire.doc.Document;
import com.spire.doc.DocumentObject;
import com.spire.doc.FileFormat;
import com.spire.doc.Section;/*** 合并Word文档** @Description* @Author ROC_WL* @Date 2024/3/8**/
public class MergerDocxTest {public static void main(String[] args) {//创建document对象Document document = new Document("D:\\temp\\document-blank.docx");//读取一个空的Word文档//加载一个需要写入的Word文档Document doc1 = new Document("D:\\temp\\document1.docx");for (int i = 0; i < doc1.getSections().getCount(); i++) {Section s = doc1.getSections().get(i);for (int j = 0; j < s.getBody().getChildObjects().getCount(); j++) {//获取文档中的段落和表格DocumentObject obj = s.getBody().getChildObjects().get(j);//将文档中的段落和表格插入到新的文档中document.getLastSection().getBody().getChildObjects().add(obj.deepClone());}}//循环写入for (int x = 0; x < 2; x++) {Document doc2 = new Document("D:\\temp\\document2.docx");for (int i = 0; i < doc2.getSections().getCount(); i++) {Section s = doc2.getSections().get(i);for (int j = 0; j < s.getBody().getChildObjects().getCount(); j++) {DocumentObject obj = s.getBody().getChildObjects().get(j);document.getLastSection().getBody().getChildObjects().add(obj.deepClone());}}}//保存文档document.saveToFile("D:\\temp\\mergerDocx.docx", FileFormat.Docx_2013);}
}

 

2、插入文字、图片、表格、富文本

import com.example.utils.DocxUtil;
import com.spire.doc.*;
import com.spire.doc.documents.*;
import com.spire.doc.fields.DocPicture;import java.awt.*;
import java.util.ArrayList;
import java.util.List;/*** TODO** @Description* @Author WL* @Date 2024/2/28**/
public class DocxAddParagraphTest {public static void main(String[] args) {//创建document对象Document document = new Document("D:\\temp\\document-blank.docx");//获取最后一个sectionSection newSec = document.getLastSection();//添加文本Paragraph textParagtaph = newSec.addParagraph();//设置文本格式ParagraphStyle styleContent = new ParagraphStyle(document);styleContent.setName("codeStyle");styleContent.getCharacterFormat().setFontName("宋体");styleContent.getCharacterFormat().setFontSize(10f);styleContent.getParagraphFormat().setHorizontalAlignment(HorizontalAlignment.Left);document.getStyles().add(styleContent);textParagtaph.applyStyle("codeStyle");textParagtaph.appendText("第01号");Paragraph text1Paragtaph = newSec.addParagraph();//设置文本格式ParagraphStyle styleTitle = new ParagraphStyle(document);//设置样式名称styleTitle.setName("titleStyle");//设置字体styleTitle.getCharacterFormat().setFontName("宋体");//设置字体大小styleTitle.getCharacterFormat().setFontSize(20f);//设置文本颜色styleTitle.getCharacterFormat().setTextColor(Color.CYAN);//设置文本居中styleTitle.getParagraphFormat().setHorizontalAlignment(HorizontalAlignment.Center);//添加样式到文档document.getStyles().add(styleTitle);//应用样式text1Paragtaph.applyStyle("titleStyle");//添加文本text1Paragtaph.appendText("关于******公告");//添加文本Paragraph textPeoParagtaph = newSec.addParagraph();//设置文本格式ParagraphStyle stylePeoContent = new ParagraphStyle(document);stylePeoContent.setName("peoStyle");stylePeoContent.getCharacterFormat().setFontName("宋体");stylePeoContent.getCharacterFormat().setFontSize(12f);stylePeoContent.getParagraphFormat().setHorizontalAlignment(HorizontalAlignment.Left);document.getStyles().add(stylePeoContent);textPeoParagtaph.applyStyle("peoStyle");textPeoParagtaph.appendText("姓名:姜XX\t\t\t手机号码:13866669999");//添加文本Paragraph textAddParagtaph = newSec.addParagraph();//设置文本格式ParagraphStyle styleAddContent = new ParagraphStyle(document);styleAddContent.setName("addStyle");styleAddContent.getCharacterFormat().setFontName("宋体");styleAddContent.getCharacterFormat().setFontSize(12f);styleAddContent.getParagraphFormat().setHorizontalAlignment(HorizontalAlignment.Left);document.getStyles().add(styleAddContent);textAddParagtaph.applyStyle("addStyle");textAddParagtaph.getFormat().setFirstLineIndent(30f);textAddParagtaph.appendText("联系地址:湖北武汉");//添加表格List<String> headerList = new ArrayList<>();headerList.add("姓名");headerList.add("电话");headerList.add("地址");List<List<Object>> dataList = new ArrayList<>();List<Object> data1 = new ArrayList<>();data1.add("姜XX");data1.add("18899996666");data1.add("浙江");dataList.add(data1);List<Object> data2 = new ArrayList<>();data2.add("tj");data2.add("15549490011");data2.add("杭州");dataList.add(data2);List<Object> data3 = new ArrayList<>();data3.add("赵XX");data3.add("135****713");data3.add("武汉");dataList.add(data3);String tableTitle = "表格标题";DocxUtil.createTable(newSec, headerList, dataList, tableTitle);//添加图片// 创建 DocPicture 类的对象DocPicture picture = new DocPicture(document);// 从磁盘加载图片String images = "D:\\temp\\123.jpg";picture.loadImage(images);// 设置图片大小picture.setWidth(180); //示例:80picture.setHeight(180);//示例:50picture.setHorizontalPosition(110); //示例:110.0F 水平位置picture.setVerticalPosition(220); //示例:110.0F 垂直位置Paragraph picParagraph = newSec.addParagraph();picParagraph.getChildObjects().add(picture);//添加图片// 创建 DocPicture 类的对象DocPicture picture1 = new DocPicture(document);// 从磁盘加载图片String images1 = "D:\\temp\\321.jpg";picture1.loadImage(images1);// 设置图片大小picture1.setWidth(500); //示例:80picture1.setHeight(180);//示例:50picture1.setHorizontalPosition(110); //示例:110.0F 水平位置picture1.setVerticalPosition(220); //示例:110.0F 垂直位置Paragraph picParagraph1 = newSec.addParagraph();picParagraph1.getChildObjects().add(picture1);//添加富文本Paragraph tempSectionContentParagraph = newSec.addParagraph();String htmlContent = "<p>Spire.Doc for Java 是一款专业的 Java Word 组件,开发人员使用它可以轻松地将 Word 文档创建、读取、编辑、转换和打印等功能集成到自己的 Java 应用程序中。作为一款完全独立的组件,Spire.Doc for Java 的运行环境无需安装 Microsoft Office。</p>
<p>Spire.Doc for Java 能执行多种 Word 文档处理任务,包括生成、读取、转换和打印 Word 文档,插入图片,添加页眉和页脚,创建表格,添加表单域和邮件合并域,添加书签,添加文本和图片水印,设置背景颜色和背景图片,添加脚注和尾注,添加超链接,加密和解密 Word 文档,添加批注,添加形状等。</p>
<p><img src="data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAAAAXNSR0IArs4c6QAABWVJREFUeAHtnF9oW1Ucx3/nJumWZNXRqUh7W+PYFFa6NKAgKLVMHKgg+jARYYgMfaqwl3V7W/cidj46fVBERBHZi3tQx8ANGSKIQpqWPYyOLV1vowirxTaJS5N79vvdQdaO3Oacc+9NbsLJ0/3z/f3O9/fJ+XPvzW0B9EcT0AQ0AU1AE9AENAFNQBNoMwHW5vY3NZ8biJucwwQw9jJw/rhzkrEbuP0TY3AmvVS2NgW0eCc0sGbM+ASCOg0c4g0ZMCgDZ8cyhdInDc+34GAoYM30xz/kAMdF6kXD06OF8gkRrd8aw++EsvmyZmJKFBTlJi3FyLbjh76tPStrJifBtqeVCjGM4xmreFopVjGobbCcOcqGjxV9O2HMgPdHrfIZLzlkYtsCK2cmjnCbf45DylP7GMyZwd5NW6UvZIpW1Xoyq9LorJl8y7btrxGUL/MlFmAbhnF4v1X8VsWPTExLYeHQe53bcBYNRmVMCmirOCTfwCH5vYBWWdIyWLNm4iWb83N4LdWj7HaLQLxorRiMvbbfKp3fQubpVEtg5QZ2HOBQ+xFBbffktkkwAvufQeSV9NLapSZSpdOBw8oO9T7LqtULOEcllRxKBmFBxQhED44UVn+TDG0qDxTW3GDiqWoNLuKi9UBTJ74K2H/RCLwwslj608+0gcHCVW8E56hfOOd9fhoWzcUYW8Y5bBxXyTnRmGa6QGDl+nufxDnqMgf+SDMDQZ5nwP7BOWwsXVi96kc7vlzrbDQyO/Tgbs5qF9sNijyRB/JCnjZ6VN32tWfN9fcN1qCMPQpSqoaCiMMi8xGIj40Ulhe95PcN1pVU8tHKun0Zv869XgwFFstgvidmjA3ni3+rtuHLMLz6RO9D6xX+c2hBER38EskjeVWF5blnZVM7d7L1yiVc9TKqJloZh6tklsd6DmTyKyuy7XrqWVeGH96BoM53CiiCQ17JM3lvGaxF04xXVtZ+wMafkW203XryTN6pBhkvSj1rfs+ebbfs5XM4Dzwv01iotOidaqBaRH1Jw+Lj49G1cuEsXsMcFG0krDqqwakFaxLxKAWLHzoUyc3//g0O/FdFkneEBmuhmqi2Zn6FV0Mc52zGTH6JoN5ulrQjzzP21ahVfAdXS7ymbvwR7lm5gcQHXQuK2GAncGpszMk5KtSzZoZ6n4NqlW5jhPRbtBfqU1gch2h0bPTm6q+NjIr1rFp1ottBERynRqy1ESg6JgYL2ItuCbrvuHutgrBEoXYFOlcmric2l80vbN7v5j33WoVgxWLGUZzar3UzIqc2rNGp1aVQ4dWN7qOW4dZ7+CPp0whuoJ6PQwonxlR9vwM2sOg81pCvW+WwhD/S/tEHuz4btKxy/fh9G8Kw7our7+b6Eydt4FP1Ax2wYQCbShdKp2StCg1D2aTdqtewJL5ZobttiXxKUvrZHW8OvuMMFrZKgHdtj+Gl45tBvwbg5iEUsDhj0xmrNOVmcuNxfEVyAe/jTm481qrtUAxDg7ProgXLaEVziupCAQvNyqzKMlpRDkK6sMASMksiWw6scF4RYcfBEikqKI2GJUFWw9KwJAhISHXP0rAkCEhIdc/SsCQISEh1z9KwJAhISD33LHxisCbRXiikqp49w8I/YrNCQUDGhKJnz7B6YvjSbYd9VD17hrVvofQXPumkP4vriA95Jc8qZj3DokZj27YfwydSrj8hqRgLJAY9Ol4Vk/sCa/j6vzeBG2151CtVN3p0vEoF3RP7AovSZQrFj/A9k0nsYev30odky/FkTN71qO7JN1hkgcxEo5E0/nuUTxHaNZwfbqtb8xbptE2vHKAX8uQVlDc3OloT0AQ0AU1AE+gWAncAtcuNfiX0sWkAAAAASUVORK5CYII=" alt="" width="75" height="75" /></p>";htmlContent=htmlContent+"<p>&nbsp;</p>";tempSectionContentParagraph.appendHTML(htmlContent);//添加文本Paragraph text3Paragtaph = newSec.addParagraph();ParagraphStyle styleContent3 = new ParagraphStyle(document);styleContent3.setName("codeStyle3");styleContent3.getCharacterFormat().setFontName("宋体");styleContent3.getCharacterFormat().setFontSize(15f);document.getStyles().add(styleContent3);text3Paragtaph.applyStyle("codeStyle3");text3Paragtaph.appendText("第02号");Paragraph text4Paragtaph = newSec.addParagraph();//设置文本格式ParagraphStyle styleTitle4 = new ParagraphStyle(document);styleTitle4.setName("titleStyle4");styleTitle4.getCharacterFormat().setFontName("宋体");styleTitle4.getCharacterFormat().setFontSize(25f);styleTitle4.getCharacterFormat().setTextColor(Color.ORANGE);styleTitle4.getParagraphFormat().setHorizontalAlignment(HorizontalAlignment.Center);document.getStyles().add(styleTitle4);text4Paragtaph.applyStyle("titleStyle4");text4Paragtaph.appendText("关于***************************Text");DocxUtil.insertHeaderAndFooter(newSec);document.saveToFile("D:\\temp\\documentNew.docx", FileFormat.Docx_2013);}}

使用到的工具

import com.spire.doc.*;
import com.spire.doc.documents.*;
import com.spire.doc.fields.TextRange;
import java.awt.*;
import java.security.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;/*** TODO** @Description* @Author WL* @Date 2024/2/28**/
public class DocxUtil {// 动态创建表格public static void createTable(Section section, List<String> header, List<List<Object>> data, String title) {//添加表格Table table = section.addTable(true);//设置表格的行数和列数table.resetCells(data.size()+ 2, header.size());//设置第一行作为表格的表头并添加数据TableRow row = table.getRows().get(1);row.isHeader(true);row.setHeight(40);row.setHeightType(TableRowHeightType.Exactly);TableRow row3 = table.getRows().get(0);row3.isHeader(true);row3.setHeight(60);row3.setHeightType(TableRowHeightType.Exactly);row3.getCells().get(0).getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);table.applyHorizontalMerge(0, 0, header.size() - 1);Paragraph p1 = row3.getCells().get(0).addParagraph();p1.getFormat().setHorizontalAlignment(HorizontalAlignment.Center);TextRange range3 = p1.appendText(title);range3.getCharacterFormat().setFontName("仿宋_GB2312");range3.getCharacterFormat().setFontSize(12f);range3.getCharacterFormat().setTextColor(Color.black);range3.getCharacterFormat().setBold(true);for (int i = 0; i < header.size(); i++) {row.getCells().get(i).getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);Paragraph p = row.getCells().get(i).addParagraph();p.getFormat().setHorizontalAlignment(HorizontalAlignment.Center);TextRange range1 = p.appendText(header.get(i));range1.getCharacterFormat().setTextColor(Color.black);range1.getCharacterFormat().setFontName("仿宋_GB2312");range1.getCharacterFormat().setFontSize(12f);range1.getCharacterFormat().setBold(true);}//添加数据到剩余行try{for (int r = 0; r < data.size(); r++) {TableRow dataRow = table.getRows().get(r + 2);dataRow.setHeight(25);dataRow.setHeightType(TableRowHeightType.Exactly);dataRow.getRowFormat().setBackColor(Color.white);for (int c = 0; c < data.get(r).size(); c++) {dataRow.getCells().get(c).getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);String s = "";if (data.get(r).get(c) instanceof Timestamp) {SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//定义格式,不显示毫秒s = df.format((Timestamp) (data.get(r).get(c)));} else if (data.get(r).get(c) instanceof Date) {SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//定义格式,不显示毫秒s = df.format((Date) (data.get(r).get(c)));} else if (data.get(r).get(c) == null) {s = "";} else {s = data.get(r).get(c).toString();}TextRange range2 = dataRow.getCells().get(c).addParagraph().appendText(s);range2.getCharacterFormat().setFontName("仿宋_GB2312");range2.getCharacterFormat().setFontSize(10f);}}}catch (Exception e){e.getMessage();
//            log.info("插入数据有异常");}section.addParagraph();}//生成页眉和页脚public static void insertHeaderAndFooter(Section section) {//分别获取section的页眉页脚HeaderFooter header = section.getHeadersFooters().getHeader();HeaderFooter footer = section.getHeadersFooters().getFooter();//添加段落到页眉Paragraph headerParagraph = header.addParagraph();//添加文字到页眉的段落TextRange text = headerParagraph.appendText("页眉测试");text.getCharacterFormat().setFontName("仿宋_GB2312");text.getCharacterFormat().setFontSize(10);text.getCharacterFormat().setItalic(true);headerParagraph.getFormat().setHorizontalAlignment(HorizontalAlignment.Left);//设置页眉段落的底部边线样式headerParagraph.getFormat().getBorders().getBottom().setBorderType(BorderStyle.Single);headerParagraph.getFormat().getBorders().getBottom().setLineWidth(1f);//添加段落到页脚Paragraph footerParagraph = footer.addParagraph();//添加Field_Page和Field_Num_Pages域到页脚段落,用于显示当前页码和总页数footerParagraph.appendField("page number", FieldType.Field_Page);footerParagraph.appendText("/");footerParagraph.appendField("number of pages", FieldType.Field_Num_Pages);footerParagraph.getFormat().setHorizontalAlignment(HorizontalAlignment.Right);//设置页脚段落的顶部边线样式footerParagraph.getFormat().getBorders().getTop().setBorderType(BorderStyle.Single);footerParagraph.getFormat().getBorders().getTop().setLineWidth(1f);}
}

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

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

相关文章

目标检测——摩托车头盔检测数据集

一、简介 首先&#xff0c;摩托车作为一种交通工具&#xff0c;具有高速、开放和稳定性差的特点&#xff0c;其事故发生率高&#xff0c;伤亡率排在机动车辆损伤的首位。因此&#xff0c;摩托车乘员头盔对于保护驾乘人员头部安全至关重要。在驾乘突发状况、人体受冲击时&#…

#14vue3生成表单并跳转到外部地址的方式

1、背景 后端返回的json数据中包含一个json数组&#xff0c;此数组中是目标跳转地址所需要的form表单的数据。 2、跳转前的页面 const goto () > {finish.value true;request.post(/xxx/yyy,{zzz: zzz.value}).then(res > {const url res.data.submitUrlconst params…

在线安装MySQL5.7

在线安装MySQL 安装MySQL5.7 yum -y install mysql57-community-release-el7-10.noarch.rpm 若无可用安装包&#xff0c;执行下面这句 wget http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm 本地安装 yum localinstall -y mysql57-community-releas…

python异常机制

当代码出现异常后底下代码都不会被执行了&#xff0c;也就是程序崩溃了。当然能避免异常的话尽量避免但是有的时候这个是没有办法避免的。 异常处理 &#xff08;注&#xff1a;异常处理是从上往下处理&#xff0c;所以编写代码时要注意&#xff09; 语法 try:可能出现异常…

【漏洞复现】锐捷 EWEB auth 远程命令执行漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

力扣面试经典150 —— 6-10题

力扣面试经典150题在 VScode 中安装 LeetCode 插件即可使用 VScode 刷题&#xff0c;安装 Debug LeetCode 插件可以免费 debug本文使用 python 语言解题&#xff0c;文中 “数组” 通常指 python 列表&#xff1b;文中 “指针” 通常指 python 列表索引 文章目录 6. [中等] 轮转…

MySQL基础-----约束

目录 前言 一、概述 二、约束演示 三、外键约束 1.介绍 2.语法 四、删除/更新行为 1.CASCADE 2.SET NULL 前言 本期我们开始MySQL约束的学习&#xff0c;约束一般是只数据键对本条数据的约束&#xff0c;通过约束我们可以保证数据库中数据的正确、有效性和完整性。 下面…

vite+vue3门户网站菜单栏动态路由控制

门户网站用户端需要分板块展示&#xff0c;板块内容由管理端配置&#xff0c;包括板块名称&#xff0c;访问路径&#xff0c;路由组件&#xff0c;展示顺序&#xff0c;是否展示。如下图所示&#xff1a; 用户访问门户网站时&#xff0c;展示菜单跳转通过板块配置&#xff0c;动…

#微信小程序(布局、渲染层基础知识)

1.IDE&#xff1a;微信开发者工具 2.实验&#xff1a; 3.记录: &#xff08;1&#xff09;view&#xff08;类似于div&#xff09; &#xff08;2&#xff09;块级元素不占满一行且水平均分布局flex,justify(space-around) &#xff08;3&#xff09;滚动<scroll view sc…

从破局到引领,小牛电动确立“领航者”地位

一代人有一代人的使命&#xff0c;一代名企也有一代名企的长征。 当下&#xff0c;高端智能两轮电动车正在跨越鸿沟进入到主流市场中&#xff0c;其中&#xff0c;以小牛电动为代表的新势力正在经历由“颠覆者”到扮演“领航者”角色转型&#xff0c;引领市场顺势而上。 不破…

C++:string的介绍

C语言中&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数&#xff0c;但是这些库函数与字符串是分离开的&#xff0c;不太符合面向对象的思想&#xff0c;而且底层空间需要用户自己管理&#xff0c;稍不留…

浅谈去耦电容的作用、选择、布局及其它电容的区别!

在一些文章资料中&#xff0c;去耦电容器被认为是旁路电容器。在其他资料中&#xff0c;去耦电容和旁路电容的区别在于&#xff1a;“旁路电容以输入信号中的干扰为滤波对象&#xff0c;而去耦电容以输出信号的干扰为滤波对象&#xff0c;防止干扰信号返回到输出端。”力量。”…

基于Java的生活废品回收系统(Vue.js+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容三、界面展示3.1 登录注册3.2 资源类型&资源品类模块3.3 回收机构模块3.4 资源求购/出售/交易单模块3.5 客服咨询模块 四、免责说明 一、摘要 1.1 项目介绍 生活废品回收系统是可持续发展的解决方案&#xff0c;旨在鼓…

如何远程访问电脑文件?

远程访问电脑文件是当今数字化时代中十分常见且实用的技术。它允许我们从任何地方的计算机或移动设备访问和操作我们的电脑中的文件。无论是远程工作、远程学习、远程协作还是方便地获得自己计算机上的重要文件&#xff0c;远程访问电脑文件都为我们提供了巨大的便利。 在远程访…

【C++】stack/queue

链表完了之后就是我们的栈和队列了&#xff0c;当然我们的STL中也有实现&#xff0c;下面我们先来看一下简单用法&#xff0c;跟我们之前C语言实现的一样&#xff0c;stack和queue有这么几个重要的成员函数 最主要的就是这么几个&#xff1a;empty&#xff0c;push&#xff0c;…

LeetCode-91题:解码方法(原创)

【题目描述】 一条包含字母 A-Z 的消息通过以下映射进行了 编码 &#xff1a; A -> "1" B -> "2" ... Z -> "26" 要 解码 已编码的消息&#xff0c;所有数字必须基于上述映射的方法&#xff0c;反向映射回字母&#xff08;可能有多种…

如何获取国外信用卡?需要国外银行卡支付怎么解决?如何订阅国外产品?

当国内的用户想要使用国外的产品时&#xff0c;很多产品是需要订阅付费的。其中有些产品还没有引入国内&#xff0c;只能用国外的信用卡支付&#xff0c;对于在国内的朋友&#xff0c;如何获取一张国外的信用卡呢&#xff1f; 这里推荐一个平台&#xff1a;wildCard waildCard…

2核4g服务器能支持多少人访问?并发数性能测评

2核4g服务器能支持多少人访问&#xff1f;支持80人同时访问&#xff0c;阿腾云使用阿里云2核4G5M带宽服务器&#xff0c;可以支撑80个左右并发用户。阿腾云以Web网站应用为例&#xff0c;如果视频图片媒体文件存储到对象存储OSS上&#xff0c;网站接入CDN&#xff0c;还可以支持…

String 的使用注意事项

String类型变量不可变 string类型的变量不可变&#xff0c;下面的拼接是怎么回事呢? // 拼接字符串 String str1 "hello"; String str2 "world"; String str3 str1 str2; System.out.println(str3);拼接都会新建 一个常量字符串一个拼接之后的字符串 …

【Unity】分拣机的数字双胞胎集成到Unity3D开发平台中

Unity HMI 一、前言 该项目的重点是通过OPC UA进行客户端-服务器通信的简单演示&#xff0c;该演示在Unity3D中实现&#xff08;服务器- B&R Automation PLC&#xff0c;客户端- Unity3D&#xff09;。该项目展示了数字孪生的分拣机与一些额外的功能。该应用程序使用多线程…