c# 数据保存为PDF(一) (spire pdf篇)
文章目录
- 前言
- 了解 Spire
- 使用Spire.PDF
- 1 创建简单的PDF文档
- 2 创建带有格式的PDF文档(使用Draw)
- 头部信息
- 页眉
- 页脚
- 测试数据
- 完整的代码
- 3 创建带有格式的PDF文档(使用Gird)
- 小结
先上一个效果图

前言
项目中需要将一些数据转存为PDF ,打开时不会乱码也不可编辑,方便用户使用和查阅。
然后在网上找了一些资料,发现一个国产开发的组件那就是Spire,功能挺丰富的,可以保存为Excel、PDF、图片、PPT、二维码还带有邮件发送功能。
了解 Spire
该组件是由蓝冰科技制作的,官网在https://www.e-iceblue.cn/
在.NET、Java和Android不同平台下都有对应的语言组件支持,可谓是太强悍了。
有免费版本和收费的专业版本,当然牛人众多也有很多破解版。免费版有10页的页数限制,还有红色的水印。将PDF转为图片时仅支持转换前3页。
使用Spire.PDF
常用的类
PdfDocument
pdf文档对象
PdfPageBase
pdf页
PdfPageTemplateElement
页面模板 页眉页脚
PdfMargins
页边距
PdfPaddings
内边距
PdfGrid
网格对象
PdfGridRow
网格行
PdfTrueTypeFont
设置字体
PdfPen
设置画笔
PdfStringFormat
格式化字符串
1 创建简单的PDF文档
//初始化一个PdfDocument实例
PdfDocument document = new PdfDocument();//设置边距
PdfUnitConvertor unitCvtr = new PdfUnitConvertor();
PdfMargins margins = new PdfMargins();
margins.Top = unitCvtr.ConvertUnits(2.54f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);
margins.Bottom = margins.Top;
margins.Left = unitCvtr.ConvertUnits(3.17f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);
margins.Right = margins.Left;//添加新页
PdfPageBase page = document.Pages.Add(PdfPageSize.A4, margins);//自定义PdfTrueTypeFont、PdfPen实例
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("宋体", 11f), true);
PdfPen pen = new PdfPen(Color.Black);//使用DrawString方法在指定位置写入文本
string text = "我的第一个C# PDF文档";
page.Canvas.DrawString(text, font,pen,100,50);//保存文档
document.SaveToFile("PDF创建.pdf");
2 创建带有格式的PDF文档(使用Draw)
确定要生成PDF文件的格式和样式,包含页眉, 页脚,中间是数据内容,内容是4列。
头部信息
主要是字体大小不一样,计算高度时要加上字体的高度
private static float CreateTitle(PdfDocument document, PdfMargins margins){//获取页面大小SizeF pageSize = document.PageSettings.Size;//声明 x y 两个float变量// float x = margins.Left;float x = 0;float y = 0;string Report = "Parameter Settings Report(Program)";string dataTime = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");PdfPageBase page = document.Pages[0];PdfTrueTypeFont Font = new PdfTrueTypeFont(new Font("微软雅黑", 15f, FontStyle.Bold), true);PdfStringFormat Format = new PdfStringFormat(PdfTextAlignment.Left);//在footerSpace中绘制线段PdfPen pen = new PdfPen(PdfBrushes.Black, 0.1f);page.Canvas.DrawString(Report, Font, PdfBrushes.Black, x, y, Format);SizeF size = Font.MeasureString(Report);Format.Alignment = PdfTextAlignment.Right;Font = new PdfTrueTypeFont(new Font("微软雅黑", 12f, FontStyle.Bold), true);SizeF sizeTime = Font.MeasureString(dataTime);RectangleF Bounds = new RectangleF(pageSize.Width - 2*sizeTime.Width, y, sizeTime.Width, sizeTime.Height);page.Canvas.DrawString(dataTime, Font, PdfBrushes.Black, Bounds, Format);y += 2 + size.Height ;page.Canvas.DrawLine(pen, x, y, pageSize.Width, y);Font = new PdfTrueTypeFont(new Font("微软雅黑", 12f, FontStyle.Bold), true);PdfTrueTypeFont Font2 = new PdfTrueTypeFont(new Font("微软雅黑", 11f, FontStyle.Regular), true);Format.Alignment = PdfTextAlignment.Left;y += 2 ;size = Font.MeasureString("Program");SizeF size2 = Font2.MeasureString("Drive Type/");float endY = y + size.Height + 2 + size2.Height;PdfPen penRe = new PdfPen(PdfBrushes.Gray, 0.1f);page.Canvas.DrawRectangle(penRe, PdfBrushes.LightCyan, new RectangleF(x, y, pageSize.Width, endY - y));page.Canvas.DrawString(" Program(Drive Selected / Connected)", Font, PdfBrushes.Black, x, y, Format);y += 2 + size.Height;page.Canvas.DrawString(" Drive Type/Model: ", Font2, PdfBrushes.Black, x, y, Format);y += 2 + size2.Height;page.Canvas.DrawLine(pen, x, y, pageSize.Width, y);y += 2;page.Canvas.DrawString("Projetc: p1", Font2, PdfBrushes.Black, x, y, Format);y += 2 + size2.Height;page.Canvas.DrawString("User: ", Font2, PdfBrushes.Black, x, y, Format);y += 2 + size2.Height;page.Canvas.DrawLine(pen, x, y, pageSize.Width , y);y += 2;page.Canvas.DrawString("Information ", Font2, PdfBrushes.Black, x, y, Format);y += 100;return y;}
页眉
页眉就是标题行了,包含这4列,还有字体、背景颜色的设置
/// <summary>/// 绘制页眉/// </summary>/// <param name="document"></param>/// <param name="page"></param>/// <param name="startY"></param>/// <returns></returns>private static float DrawPDFCodeTitle(PdfDocument document, PdfPageBase page, float startY ){SizeF docSize = document.PageSettings.Size;float x = 0;float y = startY;PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("微软雅黑", 9f, FontStyle.Bold));SizeF strSize = font.MeasureString("Default");//绘制背景色RectangleF rectangle = new RectangleF(0, startY, docSize.Width, strSize.Height * 2 + 5);page.Canvas.DrawRectangle(new PdfPen(PdfBrushes.DarkGray, 0.1f), PdfBrushes.LightCyan, rectangle);PdfStringFormat format = new PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Bottom);y += strSize.Height + 2;page.Canvas.DrawString(" Parameter", font, PdfBrushes.Black, x, y);x += (float)(docSize.Width * 0.31);page.Canvas.DrawString("Value", font, PdfBrushes.Black, x, y);x += (float)(docSize.Width * 0.098);page.Canvas.DrawString("Infomation", font, PdfBrushes.Black, x, y);x += (float)(docSize.Width * 0.3);page.Canvas.DrawString("Setting", font, PdfBrushes.Black, x, y);page.Canvas.DrawString("Default", font, PdfBrushes.Black, x, y - strSize.Height- 1);return (startY + strSize.Height * 2 + 5);}
页脚
页脚一般放置公司或个人的特征信息,加上页码
/// <summary>/// 页脚/// </summary>/// <param name="document"></param>/// <param name="margins"></param>/// <returns></returns>private static PdfPageTemplateElement CreateFooterTemplate(PdfDocument document, PdfMargins margins){//获取页面大小SizeF pageSize = document.PageSettings.Size;//创建PdfPageTemplateElement对象 footer,即页脚模板PdfPageTemplateElement footerSpace = new PdfPageTemplateElement(pageSize.Width, margins.Bottom);footerSpace.Foreground = false;//声明 x y 两个float变量float x = margins.Left;float y = 0;//在footerSpace中绘制线段PdfPen pen = new PdfPen(PdfBrushes.Black, 1f);footerSpace.Graphics.DrawLine(pen, x, y, pageSize.Width - x, y);//在footerSpace中绘制文字y = y + 5;PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("微软雅黑", 10f, FontStyle.Bold), true);PdfStringFormat format = new PdfStringFormat(PdfTextAlignment.Left);String footerText = "Test for Windows(C) by 唠嗑一夏 Electric Corporation";footerSpace.Graphics.DrawString(footerText, font, PdfBrushes.Black, x, y, format);//在footerSpace中绘制当前页码和总页码数PdfPageNumberField number = new PdfPageNumberField();PdfPageCountField count = new PdfPageCountField();PdfCompositeField compositeField = new PdfCompositeField(font,PdfBrushes.Black, "{0}/{1}", number, count);compositeField.StringFormat = new PdfStringFormat(PdfTextAlignment.Right, PdfVerticalAlignment.Top);SizeF size = font.MeasureString(compositeField.Text);compositeField.Bounds = new RectangleF(pageSize.Width - x - size.Width, y, size.Width, size.Height);compositeField.Draw(footerSpace.Graphics);//返回页脚footerSpacereturn footerSpace;}
测试数据
在这里创建了100个数据做测试使用。
/// <summary>/// 数据表格/// </summary>/// <returns></returns>private DataTable CreateData(){DataTable dt = new DataTable();DataColumn col1 = new DataColumn("Num", typeof(string));DataColumn col2 = new DataColumn("Name", typeof(string));DataColumn col3 = new DataColumn("Val", typeof(string));DataColumn col4 = new DataColumn("Des", typeof(string));DataColumn col5 = new DataColumn("Set", typeof(string));dt.Columns.Add(col1);dt.Columns.Add(col2);dt.Columns.Add(col3);dt.Columns.Add(col4);dt.Columns.Add(col5);Random random = new Random();List<string> nameList = new List<string>{"A", "BB", "CCC", "D","E", "F", "G","H","II","JJ", "LL", "M"};List<string> tempList = new List<string>{"dsd", "sdfdgvre", "Hello", "Gilrs","Today", "YYYY", "dfgre","GSD","fdgfer","Wesd", "DLG", "fsdahfi;o"};for(int i=0; i<10; i++){for(int j=0; j<10; j++){DataRow dr = dt.NewRow();dr[0] = "KK" + i.ToString("d2") + "." + j.ToString("d2");dr[1] = nameList[j];if ( j % 3 == 0){dr[2] = random.NextDouble().ToString("f3");}else{dr[2] = i * j - random.Next(0, 30);}dr[3] = tempList[j];dr[4] = random.NextDouble().ToString("f2");//添加新行dt.Rows.Add(dr);}}return dt;}
完整的代码
包含页眉、页脚、页边距、数据内容。这里主要通过Canvas.DrawString
绘制所有数据。需要注意一点的是里面涉及了简单位置和高度的计算,绘制到什么时候可以换页继续绘制,关注点在document.PageSettings.Size
的高度。
其中涉及的调用函数 SpireHelper.ActivateMemoryPatching();
是为了去掉dll自带的红色警告字体。可以注释掉该行,不影响使用。也可以访问http://t.csdn.cn/k97kx 这篇文章里面有具体的代码。
/// <summary>/// 保存到Pdf/// </summary>/// <param name="path">文件路径</param>public void SaveToPdfByDraw(string path){//临时数据DataTable dataTable = CreateData();//去掉dll自带的红色警告字体SpireHelper.ActivateMemoryPatching();//初始化PdfDocument实例PdfDocument document = new PdfDocument();//禁用IncrementalUpdatedocument.FileInfo.IncrementalUpdate = false;//设置PDF文档的压缩级别document.CompressionLevel = PdfCompressionLevel.Best;//指定页面大小document.PageSettings.Size = PdfPageSize.A4;//设置页边距为0document.PageSettings.Margins = new PdfMargins(0, 40, 0, 0);//创建PdfMargins 对象,指定期望设置的页边距PdfMargins margins = new PdfMargins(40, 60, 40, 60);//在文档模板的顶部和顶部应用页脚模板document.Template.Bottom = CreateFooterTemplate(document, margins);//在文档模板的左右部分应用空白模板document.Template.Left = new PdfPageTemplateElement(margins.Left, document.PageSettings.Size.Height);document.Template.Right = new PdfPageTemplateElement(margins.Right, document.PageSettings.Size.Height);//自定义字体 和画笔PdfTrueTypeFont fontBold = new PdfTrueTypeFont(new Font("微软雅黑", 9f, FontStyle.Bold), true);PdfTrueTypeFont fontNormal = new PdfTrueTypeFont(new Font("微软雅黑", 9f, FontStyle.Regular), true);SizeF fontSize = fontBold.MeasureString("KK00.00");//添加数据到表格int count = dataTable.Rows.Count;string str = "";string strBak = "";int j = 0;float y = 0;SizeF docSize = document.PageSettings.Size;//在文档中添加页PdfPageBase page = document.Pages.Add();{//绘制项目表头float tempH = CreateTitle(document, margins);//绘制页眉表头y = DrawPDFCodeTitle(document, page, tempH + 5);y += 2;#region 全部for (int i = 0; i < count; i++){if ((y + fontSize.Height + 2) > (document.PageSettings.Height - margins.Bottom)){//换页page = document.Pages.Add();//绘制页眉表头y = DrawPDFCodeTitle(document, page, 0) + 1;}DataRow dataRow = dataTable.Rows[i];strBak = dataRow[0].ToString().Substring(0, 4);if (strBak != str){//绘制组str = strBak;string converStr = strBak;fontSize = fontBold.MeasureString(converStr);page.Canvas.DrawString(converStr, fontBold, PdfBrushes.Black, 0, y);y += fontSize.Height + 2;page.Canvas.DrawLine(new PdfPen(PdfBrushes.Black, 0.5f), 0, y, fontSize.Width, y);}else{//绘制内容y += 2;string tempStr = dataRow[0].ToString() + " " + dataRow[1].ToString();fontSize = fontNormal.MeasureString(tempStr);if ((y + fontSize.Height + 2) > (document.PageSettings.Height - margins.Bottom)){//换页page = document.Pages.Add();//绘制页眉表头y = DrawPDFCodeTitle(document, page, 0) + 1;}float widthX = 0;page.Canvas.DrawString(tempStr, fontNormal, PdfBrushes.Black, widthX, y);widthX += (float)(docSize.Width * 0.31);page.Canvas.DrawString(dataRow[2].ToString(), fontNormal, PdfBrushes.Black, widthX, y);widthX += (float)(docSize.Width * 0.098);page.Canvas.DrawString(dataRow[3].ToString(), fontNormal, PdfBrushes.Black, widthX, y);widthX += (float)(docSize.Width * 0.3);page.Canvas.DrawString(dataRow[4].ToString(), fontNormal, PdfBrushes.Black, widthX, y);y += fontSize.Height + 2;}}#endregion}//保存document.SaveToFile(path, Spire.Pdf.FileFormat.PDF);//打开创建的PDFSystem.Diagnostics.Process.Start(path);}
第一页的效果图
3 创建带有格式的PDF文档(使用Gird)
上一种方式是使用Draw
绘制内容的,这里呢介绍另外一种相对简单的方式,使用Grid
的绘制。
/// <summary>/// 保存到Pdf/// </summary>/// <param name="path">文件路径</param>public void SaveToPdfByGrid(string path){//获取临时数据DataTable dataTable = CreateData();//去掉dll自带的红色警告字体SpireHelper.ActivateMemoryPatching();//初始化PdfDocument实例PdfDocument document = new PdfDocument();//禁用IncrementalUpdatedocument.FileInfo.IncrementalUpdate = false;//设置PDF文档的压缩级别document.CompressionLevel = PdfCompressionLevel.Best;//指定页面大小document.PageSettings.Size = PdfPageSize.A4;//设置页边距为0document.PageSettings.Margins = new PdfMargins(0, 60, 0, 0);//创建PdfMargins 对象,指定期望设置的页边距PdfMargins margins = new PdfMargins(40, 60, 40, 60);//在文档模板的顶部和顶部应用页眉页脚模板document.Template.Bottom = CreateFooterTemplate(document, margins);//在文档模板的左右部分应用空白模板document.Template.Left = new PdfPageTemplateElement(margins.Left, document.PageSettings.Size.Height);document.Template.Right = new PdfPageTemplateElement(margins.Right, document.PageSettings.Size.Height);//在文档中添加两页并写入文字PdfPageBase page = document.Pages.Add();float spaceH = CreateTitle(document, margins);//自定义字体 和画笔PdfPen pen = new PdfPen(Color.Transparent, 0.001f);pen.DashStyle = PdfDashStyle.None;PdfPen titlePen = new PdfPen(Color.Gray, 0.05f);pen.DashStyle = PdfDashStyle.Solid;PdfPen groupPen = new PdfPen(Color.Black, 0.1f);pen.DashStyle = PdfDashStyle.Solid;//创建PdfGrid类对象PdfGrid grid = new PdfGrid();//设置单元格填充grid.Style.CellPadding = new PdfPaddings(1, 1, 1, 1);//添加表格列数grid.Columns.Add(4);SizeF pageSize = document.PageSettings.Size;//设置列宽grid.Columns[0].Width = (float)(pageSize.Width * 0.35);grid.Columns[0].Width = (float)(pageSize.Width * 0.098); ;grid.Columns[0].Width = (float)(pageSize.Width * 0.42); ;grid.Columns[0].Width = (float)(pageSize.Width * 0.117); ;//添加表头行以及表格数据PdfGridRow[] pdfGridRows = grid.Headers.Add(1);for (int i = 0; i < pdfGridRows.Length; i++){//指定字体pdfGridRows[i].Style.Font = new PdfTrueTypeFont(new Font("微软雅黑", 12f, FontStyle.Bold), true);pdfGridRows[i].Cells[0].Value = " Parameter";pdfGridRows[i].Cells[1].Value = "Value";pdfGridRows[i].Cells[2].Value = "Infomation";pdfGridRows[i].Cells[3].Value = "Default\r\n Setting";pdfGridRows[i].Style.BackgroundBrush = PdfBrushes.LightCyan;pdfGridRows[i].Style.TextBrush = PdfBrushes.Black;pdfGridRows[i].Height = 40f;pdfGridRows[i].Cells[0].StringFormat = new PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Bottom);pdfGridRows[i].Cells[1].StringFormat = new PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Bottom);pdfGridRows[i].Cells[2].StringFormat = new PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Bottom);pdfGridRows[i].Cells[3].StringFormat = new PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Bottom);pdfGridRows[i].Cells[0].Style.Borders.All = titlePen;pdfGridRows[i].Cells[0].Style.Borders.Right = pen;pdfGridRows[i].Cells[1].Style.Borders.All = titlePen;pdfGridRows[i].Cells[1].Style.Borders.Right = pen;pdfGridRows[i].Cells[1].Style.Borders.Left = pen;pdfGridRows[i].Cells[2].Style.Borders.All = titlePen;pdfGridRows[i].Cells[2].Style.Borders.Right = pen;pdfGridRows[i].Cells[2].Style.Borders.Left = pen;pdfGridRows[i].Cells[3].Style.Borders.All = titlePen;pdfGridRows[i].Cells[3].Style.Borders.Left = pen;}//设置重复表头(表格跨页时)grid.RepeatHeader = true;//添加数据到表格int count = dataTable.Rows.Count;string str = "";string strBak = "";int j = 0;bool IsGroup = false;for (int i = 0; i < count; i++){PdfGridRow row = grid.Rows.Add();DataRow dataRow = dataTable.Rows[i];strBak = dataRow[0].ToString().Substring(0, 4);if (strBak != str){IsGroup = true;str = strBak;string converStr = strBak ;//写入row.Cells[0].Value = strBak ;j++;//指定字体row.Cells[0].Style.Font = new PdfTrueTypeFont(new Font("微软雅黑", 9f, FontStyle.Bold), true);row.Cells[0].Style.Borders.Bottom = groupPen;row.Cells[0].Style.Borders.Top = pen;row.Cells[0].Style.Borders.Left = pen;row.Cells[0].Style.Borders.Right = pen;}else{//指定字体row.Style.Font = new PdfTrueTypeFont(new Font("微软雅黑", 9f, FontStyle.Regular), true);row.Cells[0].Value = dataRow[0].ToString() + " " + dataRow[1].ToString(); row.Cells[1].Value = dataRow[2].ToString();row.Cells[2].Value = dataRow[3].ToString();row.Cells[3].Value = dataRow[4].ToString(); ;if (IsGroup){IsGroup = false;row.Cells[0].Style.Borders.Top = titlePen;row.Cells[0].Style.Borders.Bottom = pen;row.Cells[0].Style.Borders.Left = pen;row.Cells[0].Style.Borders.Right = pen;}else{row.Cells[0].Style.Borders.All = pen;}}row.Cells[1].Style.Borders.All = pen;row.Cells[2].Style.Borders.All = pen;row.Cells[3].Style.Borders.All = pen;}//在pdf页面绘制表格grid.Draw(page, new PointF(0, spaceH + 20));//保存文档document.SaveToFile(path);//打开PDFSystem.Diagnostics.Process.Start(path);}
小结
1、关于该组件的红色警告字体可以参考文章:http://t.csdn.cn/k97kx
2、使用PdfGrid
放置内容会比较方便,简单,但格式花样就没有那么多。
3、使用 PdfPageBase.Canvas.Draw
函数类,可以自由自定义绘制格式,就是需要计算高度和宽度,相对复杂一点。
相关文章:

c# 数据保存为PDF(一) (spire pdf篇)
文章目录 前言了解 Spire使用Spire.PDF1 创建简单的PDF文档2 创建带有格式的PDF文档(使用Draw)头部信息页眉页脚测试数据完整的代码 3 创建带有格式的PDF文档(使用Gird)小结 先上一个效果图 前言 项目中需要将一些数据转存为PDF …...

Stable Diffusion使用方法
SD的本地安装教程有很多我就不重复了,这里主要是记录我在使用SD Webui的过程中遇到的问题,总结的一些提升出图效率,出好图概率的经验。 先搞几张看看效果 二次元妹妹 高达 ? Ok,以上只是一小部分成品 ,属…...

高性能:负载均衡
目录 什么是负载均衡 负载均衡分类 服务端负载均衡 服务端负载均衡——软硬件分类 服务端负载均衡——OSI模型分类 客户端负载均衡 负载均衡常见算法 七层负载均衡做法 DNS解析 反向代理 什么是负载均衡 将用户请求分摊(分流) 到不同的服务器上…...

Matplotlib 安装介绍
文章目录 安装步骤 Matplotlib 不止是一个数学绘图库,它也是可视化和分析工具中最流行之一。我们可用其制作简单的图表,如折线图和散点图。 安装步骤 先进入:python官网 跳转到界面: 录入并搜索 下载之前,看一下自…...
DNS:关于 DNS 基本概念的一些笔记整理
写在前面 分享一些 DNS 的笔记整理博文内容涉及: DNS 历史介绍DNS 解析顺序DNS 基本概念资源类型介绍DNS 安全 理解不足小伙伴帮忙指正 傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺…...
机器人学一些知识
机器人动力学模型是用数学方法描述机器人运动和力学特性的模型。它包含机器人的几何结构、质量、惯性、摩擦等物理特性,以及机器人的控制系统和传感器等。机器人动力学模型可以用于机器人的运动规划、控制算法设计、仿真和优化等应用中。 机器人动力学模型通常采用…...

应用,auto,内联函数
6.引用: //指针 int main() {int a 0;int& b a;int& c b;int& d c;cout << &a << endl;cout << &b << endl;cout << &c << endl;cout << &d << endl;b;d;cout << a <<…...

Flask框架的学习---01
1.工程搭建: (1) 安装flask: pip3 install flask (2)命令行: (1)终端运行:flask run (2)绑定IP地址和端口:Flask run -h 127.0.0.1 -p 8083 修改端口号 (3࿰…...

免费gpt-4-国内使用gpt-4
如何用上gpt-4 GPT-4尚未正式发布和公开,因此我们无法提供对GPT-4的具体使用方法。但是,可以从GPT-4的前一代——GPT-3的使用经验和GPT-4的预期功能来看,建议如下: 了解GPT-4的语言处理能力和适用场景:GPT-4预计将进一…...

《程序员面试金典(第6版)面试题 16.09. 运算
题目描述 请实现整数数字的乘法、减法和除法运算,运算结果均为整数数字,程序中只允许使用加法运算符和逻辑运算符,允许程序中出现正负常数,不允许使用位运算。 你的实现应该支持如下操作: Operations() 构造函数minus…...

asp.net基于web的校园美食派送配送系统
1.系统登录:系统登录是用户访问系统的路口,设计了系统登录界面,包括用户名、密码和验证码,然后对登录进来的用户判断身份信息,判断是管理员用户还是普通用户。 2.系统用户管理:不管是…...

【JAVA】#详细介绍!!! 文件操作之File对象(1)!
本文内容不涉及文件内容操作,主要是对指定文件元信息的获取,以及通过java代码如何创建一个文件或者删除文件 目录 文件操作的File对象 File对象的基本操作方法 得到文件(夹)对象的信息元 1.getParent 2. getName 3.getPath 4…...

Vue基本的内置指令
前言 除了常见的v-bind,v-for,v-if,v-on.v-model等,本次学习一些vue提供的其他内置指令 1 v-text 给标签插入文本,类似于插值语法 它会把全部的字符串当成文本去解析,不会当成标签的,哪怕写的是标签结构 效果和插值语法是一样的 插值语法比v-text更加…...

华为孟晚舟当值首秀:2030年AI算力将增长500倍!
作者 | 范智林 来源 | 华商观察 微信号:HuashangGC 孟晚舟当值首次亮相。 4月19日,华为副董事长、轮值董事长、CFO孟晚舟在华为第20届全球分析师大会上进行演讲,这是她当值华为轮值董事长以来的首次公开亮相。 按照华为内部规定,…...

关于python异常的总结
Python异常是在程序执行时发生的错误,可能会导致程序终止运行。 在Python中,异常处理是一种机制,它允许开发人员在程序发生异常时捕获、处理和报告这些异常,以便程序可以继续运行或在出现异常时进行优雅的退出。 在Python中&…...

基于Java+SpringBoot+vue学生学习平台详细设计实现
基于JavaSpringBootvue学生学习平台详细设计实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 文章目…...

【云原生网关】Kong 使用详解
目录 一、前言 二、Kong介绍 三、Kong核心组件 3.1 kong组件介绍 3.1.1 Kong Server 3.1.2 Apache Cassandra/PostgreSQL 3.1.3 Kong dashboard 3.2 传统网关与Kong工作模式对比 四、Kong网关特征与架构 4.1 kong网关特征 4.1.1 可扩展性 4.1.2 模块化 4.1.3 在任…...
浅谈之Java多线程
Java多线程是Java语言中一个非常重要的特性,它允许程序同时执行多个任务。通过多线程,程序可以同时处理多项任务,从而缩短程序的执行时间。另外,多线程也有助于利用多核处理器,更好地发挥计算机硬件的性能。 那我们在…...

【Vue3学习笔记1】一个清单应用帮你入门Vue.js
Vue 目前已经是国内最流⾏的前端框架之⼀,Vue 3 带来的诸多优化更是让前端圈迎来了新的潮流,比如: 基于 Proxy 的全新响应式实现; Composition API <script setup> 组织代码的更优方式; 更有料的 TypeScript 支…...
go破冰之旅·8·go函数基本实践及各种玩法
一次5-10分钟即可搞定,以干货效率的学习方式带你更直观的玩转各种玩法! 行文不易,一字一句纯手打创造,倾注了不少精力,感谢支持。 目录 什么是函数?有哪些元素? 函数参数、返回值 小程序&…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...

深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...