C#电子名片(vCard)

目录

1.介绍

2.基本定义

3.字段信息

4,字段详解。

4.1,预定义类型的用法

4.2,基本类型

4.3,通讯地址类型

4.4,电信通信类型

4.5,地理类型

4.6,解释类型

5,应用。

6,效果。

7,Demo链接。


1.介绍

        vCard(也称为电子名片)是一种常用的文件格式,用于存储个人和业务联系信息,例如姓名、电话号码、电子邮件地址等。vCard通常使用.vcf文件扩展名,并且可以通过邮件、短信或其他方式共享给他人。vCard最早由Versit联盟于1995年提出,该联盟成员包括苹果公司、AT&T科技(后来的朗讯)、IBM及西门子。

2.基本定义

vCard 必须以 BEGIN:VCARD 开头,以 END:VCARD 结尾。定义第二行为版本号 VERSION:3.0VERSION:2.1

vCard 每行数据的格式为: 类型[;参数]:值

例如:TEL;TYPE=work,voice,pref,msg:+1-213-555-1234

类型:TEL,电话号码

参数:Type=work,voice,pref,msg,可选项

值:+1-213-555-1234

3.字段信息

字段名介绍
FN(Formatted Name)表示格式化的名称,通常是一个人的全名。例如:John Doe。
N(Name)表示姓名,包括姓、名、中间名、前缀和后缀。
ORG(Organization)表示组织或公司名称。例如:ABC Company。
TITLE(Job Title)表示职务或头衔。例如:Software Engineer。
TEL(Telephone Number)表示电话号码。可以使用TYPE属性指定号码类型,如WORK(工作电话)、HOME(家庭电话)、CELL(移动电话)等。
EMAIL(Email Address)表示电子邮件地址。
ADR(Address)表示地址信息。可以使用TYPE属性指定地址类型,如WORK(工作地址)、HOME(家庭地址)等。
URL(Website URL)表示网站的URL。
NOTE(Note)表示附加备注。
BDAY(Birthday)表示生日日期。
PHOTO(Photograph)表示照片。可以是URL或BASE64编码的图像数据。
REV(Revision Date)表示vCard的修订日期。
UID(Unique Identifier)表示唯一标识符,用于区分不同的vCard。
GEO(Geographic Coordinates)表示地理坐标,通常用于指定地点的经纬度。
IMPP(Instant Messaging and Presence Protocol)表示即时消息和在线状态。例如:Skype、WhatsApp等。
X-SOCIALPROFILE(Social Media Profiles)表示社交媒体账户的链接。

4,字段详解。

4.1,预定义类型的用法

BEGIN,END
vCard 必须以 BEGIN:VCARD 开头,以 END:VCARD 结尾。

SOURCE:
类型用途:其值提供如何查找vCard源的信息
其值类型:uri
类型使用情况:很少使用

NAME
类型用途:与vCard源关联的可显示演示文本
其值类型:text
类型使用情况:很少使用

PROFILE
类型用途:标识内容类型中的信息所属的目录实体的类型,其值必须使用 vCard
类型使用情况:很少使用

4.2,基本类型

FN
目的:vcard对象的名称,一个vcard对象必须包含FN类型。例子:FN:Mr. John Q. Public, Esq.

N
目的:表示姓名,包括姓、名、中间名、前缀和后缀。
例子:
    N:Public;John;Quinlan;Mr.;Esq.
    N:Stevenson;John;Philip,Paul;Dr.;Jr.,M.D.,A.C.P.
    各个组成部分可以用分号分号,每个组成部分可以用逗号。

NICKNAME
目的:表示别名、昵称
例子:
    NICKNAME:Robbie
    NICKNAME:Jim,Jimmie

PHOTO
目的:vcard对象的图像信息
ENCODING:默认是 uri,可以显式指定为 b,表示编码为内联的二进制数据
VALUE:默认是二进制值,可以显式指定为 uri 的值
TYPE:指定图像格式(主要用于内联二进制使用)
例子:
    PHOTO;VALUE=uri:http://www.abc.com/pub/photos/jqpublic.gif
PHOTO;ENCODING=b;TYPE=JPEG:MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQAwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0

BDAY
目的:表示出生日期
例子:
    BDAY:1996-04-15
    BDAY:1953-10-15T23:10:00Z
    BDAY:1987-09-27T08:30:00-06:00

4.3,通讯地址类型

ADR
目的:是一个组合,用来表示一个地址信息,值类型是一个用分号分开的文本值
例子:
    ADR;TYPE=dom,home,postal,parcel:;;123 Main Street;Any Town;CA;91921-1234;A
    ADR;HOME;POSTAL;PARCEL:;;街道地址;深圳;广东;444444;中国
TYEP参数说明:

    “dom” 国内地址
    “intl” 国际地址
    “postal” 邮政递送地址
    “parcel” 包裹递送地址
    “home” 居住地址;
    “work” 工作地址;
    “pref” 有多个地址的时候,首选送达地址

缺省"TYPE=intl,postal,parcel,work",可以替换

LABEL
目的:是一格式化的文本值,表示一个地址
例子:
LABEL;TYPE=dom,home,postal,parcel:Mr.John Q. Public/, Esq./nMail Drop: TNE QB/n123 Main Street/nAny Town/, CA 91921-1234/nU.S.A.
类似于ADR,不同的是ADR的值是结构化文本,而LABEL其值是格式化的单一文本。

4.4,电信通信类型

TEL
目的:指定一个电话号码
例子:TEL;TYPE=work,voice,pref,msg:+1-213-555-1234
说明:值是一个规范的全球唯一的电话号码
TYPE参数的值有:
    "home"表示家庭电话
    “msg” 表示语音消息传递
    “work” 工作电话
    “pref” 表示多个电话中最喜欢使用的电话
    “voice” 声音电话号码
    “fax” 传真号码
    “cell” 表示手机电话
    “video” 视频电话
    “pager” 寻呼设备号码
    “bbs” 公告板系统号码
    “modem” 调制解调器电话
    “car” 汽车电话
    “isdn” ISDN连接电话号码
    “pcs” 个人通信服务电话

TYPE参数的缺省值是"voice",格式类似于ADR,可以替换。

EMAIL
目的:指定一个电子邮件
例子:
    EMAIL;TYPE=internet:邮箱地址
    EMAIL;TYPE=x400:邮箱地址
    EMAIL;TYPE=internet,pref:邮箱地址
TYPE参数表示寻址类型,可用的值有:
    “internet” 表示一个internet 类型地址
    “x400” 表示是一个 X.400 地址
    “pref” 最喜欢使用的邮件电子
缺省使用 “internet”

MAILER
目的:指定一个电子邮件发送者
例子:MAILER:PigeonMail 2.1

4.5,地理类型

TZ
目的:时区信息
例子:
    TZ:-05:00
    TZ;VALUE=text:-05:00; EST; Raleigh/North America
参数默认是utc-offset(utc偏移量)值,也可以设置为单个文本值。

GEO
目的:地理位置信息
例子:GEO:37.386013;-122.082932
含义:CEO 经度;纬度
组织类型

TITLE
目的:工作职务(job title)
例子:TITLE:Director, Research and Development

ROLE
目的:职业角色(occupation)
例子:ROLE:Programmer

LOGO
目的:公司logo,是一个图像信息,同PHOTO
例子:LOGO;VALUE=uri:http://www.abc.com/pub/logos/abccorp.jpg

AGENT
目的:代理者
例子:
AGENT;VALUE=uri: CID:JQPUBLIC.part3.960129T083020.邮箱地址
AGENT:BEGIN:VCARD\nFN:Susan Thomas\nTEL:+1-919-555-1234\nEMAIL;INTERNET:主机地址\nEND:VCARD\n
说明:缺省是一个Vcard对象,也可是一个URI指定的外部Vcard对象

ORG
目的:表示一个组织的名称
例子:ORG:ABC, Inc.;North American Division;Marketing

4.6,解释类型

CATEGORIES

目的:分类信息,例如旅行社、互联网、IT、工业、信息技术等
例子:
    CATEGORIES:TRAVEL AGENT
    CATEGORIES:INTERNET,IETF,INDUSTRY,INFORMATION TECHNOLOGY

NOTE
目的:对vcard的注释和说明
例子:NOTE:This fax number is operational 0800 to 1715EST, Mon-Fri.

PRODID
目的:指定创建Vcard对象的产品的ID
例子:PRODID:-//ONLINE DIRECTORY//NONSGML Version 1//EN

REV
目的:指定当前Vcard的修订版本信息
例子:
    REV:1995-10-31T22:27:10Z
    REV:1997-11-15

SORT-STRING
目的:指定按照 FN 或 N 中的哪段进行排序,而非首字母排序
例如:
    FN:Rene van der Harten
    N:van der Harten;Rene;J.;Sir;R.D.O.N.
    SORT-STRING:Harten

SOUND
目的:指定Vcard的数字声音信息,缺省是指定vcard的name类型的发音信息。
例子:    SOUND;TYPE=BASIC;VALUE=uri:CID:JOHNQPUBLIC.part8.19960229T080000.xyzMail@host1.com
SOUND;TYPE=BASIC;ENCODING=b:MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQAwdzELMAkGA1UEBhMCVVMxLDAqBgljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0
类似于PHOTO,可以指定外部 uri 或者使用内联二进制信息
UID
目的:指定一个全局唯一的个人或资源标识。
例子:UID:19950401-080045-40000F192713-0052
URL
目的:指定 vCard 的关联网址。
例子:URL:http://www.swbyps.restaurant.french/~chezchic.html

VERSION
目的:指定本vCard使用的规范版本。
例子: VERSION:3.0
安全类型

CLASS
目的:指定访问Vcard对象的访问分级。例如公共、私人、机密
例子:
    CLASS:PUBLIC
    CLASS:PRIVATE
    CLASS:CONFIDENTIAL

5,应用。

        UI层面

 特别注意事项:

        网址(示例中为:daqidiguo.com)请勿带有www。如果带有,其生成的二维码,微信将无法识别。

        代码:

 public partial class Form1 : Form
    {
        CreateQRCode creater = new CreateQRCode();
      

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void btnCreateCode_Click(object sender, EventArgs e)
        {
            CardData data = new CardData
            {
                Address = txtAdress.Text,
                Company = txtCompany.Text,
                Department = txtDepartment.Text,
                Email = txtEmail.Text,
                MobilePhone = txtPhone.Text,
                Name = txtName.Text,
                Post = txtPosition.Text,
                TelPhone = txtTel.Text,
                Url = txtUrl.Text,
                //图片转为Base64嵌入时,抛出异常,尝试两种二维码生成程序集皆是如此,所以这里未嵌入图片
                Photo = true ? "" : GetBase64ByBitmap("dll/logo.jpg")


            };
            //加载logo图片
            Image img = Image.FromFile("dll/logo.jpg");
            Bitmap logo = new Bitmap(img, new Size(40, 40));
             Bitmap map = creater.CreateQRCodeImage(data, new Size(picQRCode.Width, picQRCode.Height), logo);
           // Bitmap map = BarMethHepler.Generate3(creater.GetVCardInfo(data), picQRCode.Width, picQRCode.Height);
            picQRCode.Image = map;
        }
        string GetBase64ByBitmap(string fileName)
        {
            using (FileStream fs = new FileStream(fileName, FileMode.Open))
            {
                byte[] bytes = new byte[fs.Length];
                int val = 0;
                int index = 0;
                while ((val = fs.ReadByte()) != -1)
                {
                    bytes[index] = (byte)val;
                    index++;
                }
                return Convert.ToBase64String(bytes);
            }
        }


    }
/// <summary>
    /// 名片信息类
    /// </summary>
    class CardData
    {
        public string Name { get; set; }
        public string Post { get; set; }
        public string Department { get; set; }
        public string Company { get; set; }
        public string MobilePhone { get; set; }
        public  string TelPhone { get; set; }
        public string Address { get; set; }
        public string Email { get; set; }
        public  string Url { get; set; }
        public string Photo { get; set; }
    }

第三方二维码生成dll:https://download.csdn.net/download/lingxiao16888/89370033

using ThoughtWorks.QRCode.Codec;
class CreateQRCode
    {
        public string GetVCardInfo(CardData cardData)
        {
            //vCard 每行数据的格式为: 类型[;参数]:值
            StringBuilder sb = new StringBuilder();
            //vCard 必须以 BEGIN:VCARD 开头,以 END:VCARD 结尾。定义第二行为版本号 VERSION:3.0 或 VERSION:2.1。
            sb.AppendLine("BEGIN:VCARD");
            // sb.AppendLine("VERSION:2.1");
            //FN:表示格式化的名称,通常是一个人的全名。例如:John Doe。
            sb.AppendLine("FN:" + cardData.Name);
            //N:表示姓
            // sb.AppendLine("N:" + cardData.Name[0]);
            //昵称
            sb.AppendLine("NICKNAME:" + "tom");
            //TITLE:表示职务或头衔。例如:Software Engineer。
            sb.AppendLine("TITLE:" + cardData.Post);
            //ORG:表示组织或公司名称。例如:ABC Company。
            sb.AppendLine("ORG:" + cardData.Company + ";" + cardData.Department);
            //TEL;表示电话号码。可以使用TYPE属性指定号码类型,如WORK(工作电话)、HOME(家庭电话)、CELL(移动电话)等。
            sb.AppendLine("TEL;CELL:" + cardData.MobilePhone);
            sb.AppendLine("TEL;WORK:" + cardData.TelPhone);
            //ADR;表示地址信息。可以使用TYPE属性指定地址类型,如WORK(工作地址)、HOME(家庭地址)等。
            sb.AppendLine("ADR;WORK:" + cardData.Address);
            //URL:表示网站的URL。
            sb.AppendLine("URL:" + cardData.Url);
            //EMAIL:表示电子邮件地址。
            sb.AppendLine("EMAIL:" + cardData.Email);
            //ENCODING:默认是 uri,可以显式指定为 b,表示编码为内联的二进制数据
            //  VALUE:默认是二进制值,可以显式指定为 uri 的值
            // TYPE:指定图像格式(主要用于内联二进制使用)
            // PHOTO; VALUE = uri:http://www.abc.com/pub/photos/jqpublic.gif
            // PHOTO; ENCODING = b; TYPE = JPEG:MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQAwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0
            sb.AppendLine("PHOTO;ENCODING=b;TYPE=JPEG:" + cardData.Photo);
            //vCard 必须以 BEGIN:VCARD 开头,以 END:VCARD 结尾。
            sb.AppendLine("END:VCARD");
            return sb.ToString();
        }
        public Bitmap CreateQRCodeImage(CardData cardData, Size size, Bitmap logoImg = null)
        {
            QRCodeEncoder encoder = new QRCodeEncoder();
            encoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
            //二维码大小
            encoder.QRCodeScale = 3;
            //二维码容错率
            encoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
            //二维码版本
            encoder.QRCodeVersion = 0;
            //根据信息获取对应的vCard
            Bitmap qrcode = encoder.Encode(GetVCardInfo(cardData), Encoding.GetEncoding("utf-8"));
            //将二维码绘制在指定图片上,同时将logo
            Bitmap map = new Bitmap(size.Width, size.Height);
            using (Graphics g = Graphics.FromImage(map))
            {
                //设置底色为白色
                g.Clear(Color.White);
                Point originPoint = new Point(20, 20);
                g.DrawImage(qrcode, new Rectangle(originPoint, new Size(size.Width - originPoint.X * 2, size.Height - originPoint.Y * 2)), new Rectangle(0, 0, qrcode.Width, qrcode.Height), GraphicsUnit.Pixel);
                //绘制logo
                if (logoImg != null)
                {
                    Point p = new Point((size.Width - logoImg.Width) / 2, (size.Height - logoImg.Height) / 2);
                    g.DrawImage(logoImg, p);
                    g.DrawRectangle(new Pen(Color.Red, 2), new Rectangle(p.X , p.Y , logoImg.Width , logoImg.Height ));
                }
            }
            return map;
        }
    }

特别注意事项:

        虽然vCard定义中有Photo键,其定义可携带二进制的图片,但尝试了两款二维码生成dll均抛出:“字符串长度超过许可范围”的异常。

6,效果。

微信扫描结果:

7,Demo链接。

https://download.csdn.net/download/lingxiao16888/89370039?spm=1001.2014.3001.5503

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Rviz 复选框插件

Rviz 复选框插件 0.引言1.实现效果 0.引言 参考1参考2参考3参考4 我想做的插件是类似于 pangolin 侧面的复选框&#xff0c;动态传递 bool 值给程序内部使用。查了一下只能是通过插件的方式进行实现。但是Display 的参数在编译阶段就写死了&#xff0c;我想要在运行期给定参数…

DreamPose: Fashion Image-to-Video Synthesis via Stable Diffusion

UW&UCB&Google&NVIDIA ICCV23https://github.com/johannakarras/DreamPose?tabreadme-ov-file 问题引入 输入参考图片 x 0 x_0 x0​和pose序列 { p 1 , ⋯ , p N } \{p_1,\cdots,p_N\} {p1​,⋯,pN​}&#xff0c;输出对应视频 { x 1 ′ , ⋯ , x N ′ } \{x_1,…

失落的方舟台服注册接收不到验证码 注册怎么验证手机号教程

《失落的方舟》&#xff08;Lost Ark&#xff09;是一款引人入胜的大型多人在线角色扮演游戏&#xff08;MMORPG&#xff09;&#xff0c;由韩国知名游戏开发商Smilegate精心打造。这款游戏凭借其绚丽的视觉效果、错综复杂的故事情节、媲美动作游戏的战斗机制以及无边无际的探索…

【OCPP】ocpp1.6协议第3.13章节SmartCharging介绍及翻译

目录 3.13 SmartCharging智能充电-概述 智能充电的目标 关键功能 消息类型 负载管理 动态电量配置 总结 3.13 SmartCharging智能充电-译文 3.13.1 Charging Profile Purpose充电配置的目的 3.13.2 Stacking charging profile堆叠充电配置 3.13.3 Combining charging profile pu…

为什么要学习c++?

你可能在想&#xff0c;“C&#xff1f;那不是上个时代的产物吗&#xff1f;” 哎呀&#xff0c;可别小看了这位“老将”&#xff0c;它在21世纪的科技舞台上依旧光芒万丈&#xff0c;是许多尖端技术不可或缺的基石&#xff01; 1. 无可替代 c源于c语言&#xff0c;它贴近于硬…

C++面向对象程序设计 - 标准输出流

在C中&#xff0c;标准输出流通常指的是与标准输出设备&#xff08;通常是终端或控制台&#xff09;相关联的流对象。这个流对象在C标准库中被定义为std::cout、std::err、std::clog&#xff0c;它们是std::ostream类的一个实例。 一、cout&#xff0c;cerr和clog流 ostream类…

去除uni微信小程序button的边框

想要去除button的边框&#xff0c;如下未去除边框时&#xff0c;非常影响观感。 解决方法 使用伪元素::after&#xff0c;简单但是易忘&#xff0c;正常情况下,我直接是给button上加上一个类名直接设置border&#xff1a;none&#xff0c;但是这样是无效的&#xff0c;应该如下…

【软考】下篇 第13章 层次式架构设计理论与实践

目录 一、概述1.2 通用分层1.2 分层架构注意点 二、表现层(展示层)2.1 表现层设计模式&#xff08;MVC、MVP、MVVM&#xff09;2.2 使用XML设计表现层2.3 UIP2.4 表现层动态生成设计思想 三、中间层(业务层、业务逻辑层)3.1 组件设计3.2 工作流设计3.3 实体设计3.4 业务逻辑层框…

CC1310 Debug interface is locked

XDS110连接CC1310板子&#xff0c;打开Smart RF 弹出窗口如下&#xff1a; 解决办法&#xff1a; 1 打开SmartRF Flash Programmer 2 选择连接的设备CC1310, 弹出如下窗口&#xff0c;点击OK。 3 点击Tools图标&#xff0c;选择CC26XX/CC13XX Forced Mass Erase。 4 在弹出的…

分布式锁的三种实现方案

目录 为什么需要分布式锁实现一个分布式锁需要考虑的点如何实现一个分布式锁基于数据库的实现基于 zookeeper 实现基于 redis 实现 实际项目中好用的轮子 为什么需要分布式锁 传统的 jdk 锁&#xff0c;比如 synchronized, reentrantlock 只能在单机环境中使用分布式场景下&am…

5.26 基于UDP的网络聊天室

需求&#xff1a; 如果有人发送消息&#xff0c;其他用户可以收到这个人的群聊信息 如果有人下线&#xff0c;其他用户可以收到这个人的下线信息 服务器可以发送系统信息实现模型 模型&#xff1a; 代码&#xff1a; //chatser.c -- 服务器端实现 #include <stdio.h>…

FastAPI - 组织模块2

FastAPI没有强制指定某种格式来组织项目结构&#xff0c;开发者可以根据自己喜好和项目需要来定制自己的项目结构。 https://fastapi.tiangolo.com/zh/tutorial/bigger-applications/ 在项目根目录创建python包routers&#xff0c;然后创建member.py文件 member.py文件内容 …

互联网应用主流框架整合之AOP

SpringAOP基本概念和约定流程 在实际的开发中有些内容并不是面向对象能够解决的&#xff0c;比如数据库事务&#xff0c;对于企业级应用非常重要&#xff0c;比如在电商系统中订单模块和交易模块&#xff0c;一边是交易记录一边是账户数据&#xff0c;就需要对这两者有统一的事…

权限维持--linux

隐藏文件/夹&-开头文件 如何创建: 在文件名之前加.即可 touch .1.s 如何清除、查找&#xff1a; ls -al rm -fr -文件 已-开头的文件直接读取是不行的需要带目录 隐藏时间戳 ①用其他文件的时间 touch -r zww.php testq.txt 如何清除、查看&#xff1a; stat test…

大模型基础知识

文章目录 1. 位置编码1.1 绝对位置编码1.2 相对位置编码1.3 旋转位置编码2. 注意力机制2.1 MHA(muti head attention)2.2 MQA(muti query attention)2.3 GQA(grouped query attention)3. 大模型分类4. 微调方法4.1 Prompt Tuning4.2 Prefix Tuning4.3 Lora4.4 QLora5. La…

探索机器人智能设备:开启智慧生活新篇章

机器人智能设备作为科技创新的代表&#xff0c;正以其独特的魅力吸引着越来越多的关注。它们不仅具备高度的智能化和自主化能力&#xff0c;还能在各种场景下发挥出强大的功能。 机器人智能设备的张总说&#xff1a;在智能家居领域&#xff0c;机器人智能设备可以帮助我们实现家…

改进rust代码的35种具体方法-类型(十九)-避免使用反射

上一篇文章 从其他语言来到Rust的程序员通常习惯于将反思作为工具箱中的工具。他们可能会浪费很多时间试图在Rust中实现基于反射的设计&#xff0c;却发现他们所尝试的事情只能做得不好&#xff0c;如果有的话。这个项目希望通过描述Rust在反思方面做什么和不做什么&#xff0c…

2024年【西式面点师(中级)】新版试题及西式面点师(中级)考试试卷

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【西式面点师&#xff08;中级&#xff09;】新版试题及西式面点师&#xff08;中级&#xff09;考试试卷&#xff0c;包含西式面点师&#xff08;中级&#xff09;新版试题答案和解析及西式面点师&#xff08;…

手动安装maven依赖到本地仓库

使用mvn install命令安装jar包到指定的仓库。 命令如下&#xff1a; mvn install:install-file -Dmaven.repo.localC:\Users\liyong.m2\repository -DgroupIdcom.aspose -DartifactIdwords -Dversion18.4 -Dpackagingjar -DfileC:\Users\liyong\Desktop\jar\words-18.4.jar 解释…

JAVA智慧工厂制造生产管理MES系统,全套源码,多端展示(MES与ERP系统的区别和联系)

MES与ERP系统的区别和联系 MES制造执行系统&#xff0c;是一套面向制造公司车间执行层的生产信息化管理系统。MES 可觉得公司提供涉及制造数据管理、计划排产管理、生产调度管理、库存管理、质量管理、人力资源管理、工作中心、设备管理、工具工装管理、采购管理、成本管理、项…