Unity之创建与导出PDF

news2024/12/23 4:51:08

内容将会持续更新,有错误的地方欢迎指正,谢谢!
 

Unity之创建与导出PDF
     
TechX 坚持将创新的科技带给世界!

拥有更好的学习体验 —— 不断努力,不断进步,不断探索
TechX —— 心探索、心进取!

助力快速掌握 PDF 的创建与导出

为初学者节省宝贵的学习时间,避免困惑!


TechX 教程效果:

在这里插入图片描述


文章目录

  • 一、第三方库iTextSharp导入
    • 1、通过Visual Studio的NuGet包管理器下载iTextSharp库
    • 2、导入DLL文件到Unity中
  • 二、使用iTextSharp生成和写入PDF文件的示例
  • 三、写入和导出PDF实战


一、第三方库iTextSharp导入


在Unity中生成PDF文件并写入内容,需要使用第三方库,因为Unity本身不提供直接操作PDF的API。一个常用的库是iTextSharp,这是一个强大的PDF处理库。iTextSharp是iText的C#版本,可以用于创建、修改和读取PDF文档。

1、通过Visual Studio的NuGet包管理器下载iTextSharp库


  1. 打开NuGet包管理器:

    在Visual Studio中,点击Tools菜单,选择NuGet Package Manager,然后选择Manage NuGet Packages for Solution…。

  2. 搜索iTextSharp:

    在打开的NuGet包管理器窗口中,点击Browse选项卡,然后在搜索框中输入iTextSharp。

  3. 安装iTextSharp:

    在搜索结果中找到iTextSharp包,点击Install按钮进行安装。根据提示完成安装过程。

在这里插入图片描述

2、导入DLL文件到Unity中


上一步下载的iTextSharp包在工程目录的Packages下,共包含两个文件夹:BouncyCastle.Cryptography.2.4.0和iTextSharp.5.5.13.4。

在这里插入图片描述

进入BouncyCastle.Cryptography.2.4.0\lib\net461和iTextSharp.5.5.13.4\lib\net461目录中找到BouncyCastle.Cryptography.dll和itextsharp.dll

在这里插入图片描述

将两个DLL文件复制到你的Unity项目的Assets/Plugins文件夹中。如果没有Plugins文件夹,可以创建一个。

在这里插入图片描述



二、使用iTextSharp生成和写入PDF文件的示例


在Unity项目中创建一个C#脚本,例如PDFGenerator.cs。

在脚本中使用iTextSharp来生成和写入PDF。

以下是完整的示例代码:

using UnityEngine;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
using Image = iTextSharp.text.Image;

public class PDFGenerator : MonoBehaviour
{
    void Start()
    {
        // 设置PDF保存路径
        string path = Application.dataPath + "/GeneratedPDF.pdf";
        // 图片路径
        string imgPath = Application.streamingAssetsPath+ "/path_to_image.jpg";
        
        using (FileStream fileStream = new FileStream(path, FileMode.Create))
        {
	        // 创建一个文档对象
	        Document document = new Document();
	        
	        // 创建一个PDF写入流
	        PdfWriter pdfWriter = PdfWriter.GetInstance(document, fileStream );
	        
	        // 打开文档
	        document.Open();
	        
	        // 添加内容到文档
	        document.Add(new Paragraph("Hello, World!"));
	        document.Add(new Paragraph("This is a PDF generated in Unity."));
	        
	        // 添加图片
	        Image image = Image.GetInstance(imgPath );
	        document.Add(image);
	        
	        // 添加表格
	        PdfPTable table = new PdfPTable(3); // 3列的表格
	        table.AddCell("Cell 1");
	        table.AddCell("Cell 2");
	        document.Add(table);
	        
	        //关闭写入流
	        pdfWriter.Close();
	      	// 关闭文档
	        document.Close();
		}
        

        Debug.Log("PDF generated at: " + path);
    }
}



三、写入和导出PDF实战


using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
using UnityEngine;
using Font = iTextSharp.text.Font;
using Rectangle = iTextSharp.text.Rectangle;

namespace PDFExport
{
    /// <summary>
    /// PDF文档操作类
    /// </summary>
    public class PDFOperation
    {
        #region 私有字段
        private Font font = default;
        private PdfWriter pdfWriter;
        private Rectangle documentSize;   //文档大小
        private Document document;//文档对象
        private BaseFont basefont;//字体
        #endregion

        #region 构造函数

        /// <summary>
        /// 构造函数
        /// </summary>
        public PDFOperation()
        {
            documentSize = PageSize.A4;
            document = new Document(documentSize);
        }

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="type">页面大小(如"A4")</param>
        public PDFOperation(Rectangle size)
        {
            documentSize = size;
            document = new Document(size);
        }

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="type">页面大小(如"A4")</param>
        /// <param name="marginLeft">内容距左边框距离</param>
        /// <param name="marginRight">内容距右边框距离</param>
        /// <param name="marginTop">内容距上边框距离</param>
        /// <param name="marginBottom">内容距下边框距离</param>
        public PDFOperation(Rectangle size, float marginLeft, float marginRight, float marginTop, float marginBottom)
        {
            documentSize = size;
            document = new Document(size, marginLeft, marginRight, marginTop, marginBottom);
        }

        #endregion


        #region 文档操作

        /// <summary>
        /// 创建写入流
        /// </summary>
        /// <param name="os">文档相关信息(如路径,打开方式等)</param>
        public PdfWriter OpenPdfWriter(FileStream os)
        {
            pdfWriter = PdfWriter.GetInstance(document, os);
            return pdfWriter;
        }

        /// <summary>
        /// 关闭写入流
        /// </summary>
        /// <param name="writer"></param>
        public void ClosePdfWriter()
        {
            pdfWriter.Close();
        }

        /// <summary>
        /// 打开文档
        /// </summary>
        public void Open()
        {
            document.Open();
        }

        /// <summary>
        /// 关闭打开的文档
        /// </summary>
        public void Close()
        {
            document.Close();
        }

        #endregion

        #region 设置字体

        /// <summary>
        /// 设置字体
        /// </summary>
        public void SetBaseFont(string path)
        {
            basefont = BaseFont.CreateFont(path, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
        }

        /// <summary>
        /// 设置字体
        /// </summary>
        /// <param name="size">字体大小</param>
        public Font SetFont(float size)
        {
            font = new Font(basefont, size);
            return font;
        }

        /// <summary>
        /// 设置字体
        /// </summary>
        /// <param name="size"></param>
        /// <param name="style"></param>
        public Font SetFont(float size, int style)
        {
            font = new Font(basefont, size, style);
            return font;
        }

        /// <summary>
        /// 设置字体
        /// </summary>
        /// <param name="size"></param>
        /// <param name="style"></param>
        /// <param name="fontColor"></param>
        public Font SetFont(float size, int style, BaseColor fontColor)
        {
            font = new Font(basefont, size, style, fontColor);
            return font;
        }

        /// <summary>
        /// 获取字体
        /// </summary>
        /// <returns></returns>
        public Font GetFont()
        {
            return font;
        }

        #endregion

        public void AddPage()
        {
            document.NewPage();
        }

        #region 添加段落

        /// <summary>
        /// 空格
        /// 加入空行,用以区分上下行
        /// </summary>
        public void AddNullLine(int nullLine=1,int lightHeight=12)
        {
            // Change this to the desired number of empty lines
            int numberOfEmptyLines = nullLine; 
            for (int i = 0; i < numberOfEmptyLines; i++)
            {
                Paragraph emptyLine = new Paragraph(" ", new Font(Font.FontFamily.HELVETICA, lightHeight));
                document.Add(emptyLine);
            }
        }

        /// <summary>
        /// 插入文字内容
        /// </summary>
        /// <param name="content">内容</param>
        /// <param name="alignmentType">对齐格式,0为左对齐,1为居中</param>
        /// <param name="indent">首行缩进</param>
        public void AddParagraph(string content, int alignmentType = 0,float indent = 0)
        {
            Paragraph contentP = new Paragraph(new Chunk(content, font));
            contentP.FirstLineIndent = indent;
            contentP.Alignment = alignmentType;
            document.Add(contentP);
        }

        /// <summary>
        /// 添加段落
        /// </summary>
        /// <param name="content">内容</param>
        /// <param name="Alignment">对齐方式(1为居中,0为居左,2为居右)</param>
        /// <param name="SpacingAfter">段后空行数(0为默认值)</param>
        /// <param name="SpacingBefore">段前空行数(0为默认值)</param>
        /// <param name="MultipliedLeading">行间距(0为默认值)</param>
        public void AddParagraph(string content, int Alignment, float SpacingAfter, float SpacingBefore, float MultipliedLeading)
        {
            Paragraph pra = new Paragraph(content, font);
            pra.Alignment = Alignment;
            if (SpacingAfter != 0)
            {
                pra.SpacingAfter = SpacingAfter;
            }
            if (SpacingBefore != 0)
            {
                pra.SpacingBefore = SpacingBefore;
            }
            if (MultipliedLeading != 0)
            {
                pra.MultipliedLeading = MultipliedLeading;
            }
            document.Add(pra);
        }
        #endregion

        #region 添加图片

        /// <summary>
        /// 添加图片
        /// </summary>
        /// <param name="path">图片路径</param>
        /// <param name="Alignment">对齐方式(1为居中,0为居左,2为居右)</param>
        /// <param name="newWidth">图片宽(0为默认值,如果宽度大于页宽将按比率缩放)</param>
        /// <param name="newHeight">图片高</param>
        public Image AddImage(string imagePath, int Alignment, float newWidth, float newHeight)
        {
            if (!File.Exists(imagePath))
            {
                Debug.Log("该路径下不存在指定图片,请检测路径是否正确!");
                return null;
            }
            Image img = Image.GetInstance(imagePath);
            img.Alignment = Alignment;
            if (newWidth != 0)
            {
                img.ScaleAbsolute(newWidth, newHeight);
            }
            else
            {
                if (img.Width > PageSize.A4.Width)
                {
                    img.ScaleAbsolute(documentSize.Width, img.Width * img.Height / documentSize.Height);
                }
            }
            document.Add(img);
            return img;
        }

        /// <summary>
        /// 添加图片
        /// </summary>
        /// <param name="path">图片路径</param>
        /// <param name="Alignment">对齐方式(1为居中,0为居左,2为居右)</param>
        /// <param name="newWidth">图片宽</param>
        /// <param name="newHeight">图片高</param>
        public Image AddImage(string imagePath, int Alignment, int fitWidth, int fitHeight)
        {
            if (!File.Exists(imagePath))
            {
                Debug.Log("该路径下不存在指定图片,请检测路径是否正确!");
                return null;
            }
            Image image = Image.GetInstance(imagePath);
            image.ScaleToFit(fitWidth, fitHeight);
            image.Alignment = Alignment;
            document.Add(image);
            return image;
        }

        #endregion 

        #region Table表

        public void AddTable(PdfPTable table)
        {
            document.Add(table);
        }

        #endregion
    }
}
using iTextSharp.text;
using iTextSharp.text.pdf;
using System;
using System.IO;
using UnityEditor;
using UnityEngine;
using Font = iTextSharp.text.Font;
using Image = iTextSharp.text.Image;

namespace PDFExport
{
    public class ReportExporterPDF: MonoBehaviour
    {
       private string fontPath = Application.streamingAssetsPath + "/Fonts/SIMFANG.TTF";
        string imagePath1 = Application.streamingAssetsPath + "/Images/logo.png";

        private void Start()
        {
            GenerateReportPDF();
        }

        public  void GenerateReportPDF()
        {
           CreatePDF(Application.streamingAssetsPath + "/Report.pdf");
        }


        private void CreatePDF(string filePath)
        {
           	using (FileStream fileStream = new FileStream(filePath, FileMode.Create))
            {
                PDFOperation pdf = new PDFOperation(PageSize.A4, 55f, 55f, 96f, 96f);
                pdf.SetBaseFont(fontPath);
                PdfWriter pdfWriter = pdf.OpenPdfWriter(fileStream);
                pdf.Open();

                HeaderFooterPageEvent headerFooterPageEvent = new HeaderFooterPageEvent(pdf,this);
                pdfWriter.PageEvent = headerFooterPageEvent;

                FirstPasge(pdf);

                pdf.Close();
                pdf.ClosePdfWriter();
#if UNITY_EDITOR
                AssetDatabase.Refresh();
#endif
            }
            Application.OpenURL(filePath);
        }

        #region FirstPage

        private void FirstPasge(PDFOperation pdf)
        {
            pdf.AddNullLine(1, 22);

            Image image1 = Image.GetInstance(imagePath1);

            PdfPTable table = new PdfPTable(1);

            table.DefaultCell.Border = Rectangle.NO_BORDER;
            table.DefaultCell.Padding = 0;
            table.DefaultCell.FixedHeight = 100;

            // 设置图片的缩放比例
            float scale = 0.9f;
            image1.ScaleAbsolute(image1.Width * scale, image1.Height * scale);
            PdfPCell cell1 = new PdfPCell(image1);
            cell1.HorizontalAlignment = 1;
            cell1.PaddingRight = 0;
            cell1.Border = Rectangle.NO_BORDER;
            table.AddCell(cell1);
            pdf.AddTable(table);

            pdf.AddNullLine();
            pdf.SetFont(24);
            pdf.AddParagraph("汽车实验系统", 1);

            pdf.AddNullLine();
            pdf.SetFont(36, Font.BOLD);
            pdf.AddParagraph("实验报告", 1);
            pdf.AddNullLine(3);
            AddMainInfo(pdf);
        }


        public void AddMainInfo(PDFOperation pdf)
        {
            // 创建一个有 2 列的表格
            float[] columnWidths = { 124, 369 };
            PdfPTable table = new PdfPTable(columnWidths);
            table.DefaultCell.Border = Rectangle.NO_BORDER;

            // 设置表格宽度和对齐方式
            table.WidthPercentage = 80;
            table.HorizontalAlignment = Element.ALIGN_CENTER;

            string[] cellContents = {
                "实验名称:", "汽车仿真实验",
                "实验地点:", "",
                "学生姓名:", "",
                "指导教师:", "",
                "所属单位:", "",
                "支持单位:", "XXXX科技大学",
                "支持单位:", "XXXXXX股份有限公司",
                "实验时间:", DateTime.Now.ToString("yyyy年MM月dd日")
            };

            // 用提供的信息添加表格单元格
            for (int i = 0; i < cellContents.Length; i++)
            {
                PdfPCell cell;
                if (i % 2 == 0)
                {
                    pdf.SetFont(14, Font.BOLD);
                    cell = new PdfPCell(new Phrase(cellContents[i], pdf.GetFont()));
                }
                else
                {
                    pdf.SetFont(14, Font.NORMAL);
                    cell = new PdfPCell(new Phrase(cellContents[i], pdf.GetFont()));
                }
                cell.Padding = 10;
                cell.Border = Rectangle.NO_BORDER;
                table.AddCell(cell);
            }

            pdf.AddTable(table);
        }
        #endregion

        #region  页眉页脚

        public class HeaderFooterPageEvent : PdfPageEventHelper
        {
            PDFOperation pdf;
            ReportExporterPDF reportExporter;
            public HeaderFooterPageEvent(PDFOperation pdf, ReportExporterPDF reportExporter)
            {
                this.pdf = pdf;
                this.reportExporter = reportExporter;
            }

            public override void OnEndPage(PdfWriter writer, Document doc)
            {
                base.OnEndPage(writer, doc);

                Header(writer, doc);
                Footer(writer, doc);
            }

            private void Header(PdfWriter writer, Document doc)
            {
                float[] columnWidths = { 25, 200 };

                // 添加带图片和文字的页眉
                PdfPTable headerTable = new PdfPTable(columnWidths);
                headerTable.DefaultCell.Border = Rectangle.NO_BORDER;
                headerTable.WidthPercentage = 100;
                headerTable.HorizontalAlignment = Element.ALIGN_CENTER;

                headerTable.TotalWidth = doc.PageSize.Width - doc.LeftMargin - doc.RightMargin; // Set table width
                headerTable.LockedWidth = true; // Lock the table width

                Image image1 = Image.GetInstance(reportExporter.imagePath1);

                // Add images to the header
                image1.ScaleAbsolute(image1.Width / 2, image1.Height / 2);
                PdfPCell imageCell1 = new PdfPCell(image1);
                imageCell1.Border = Rectangle.NO_BORDER;

                // Add text to the header
                pdf.SetFont(10, Font.NORMAL, BaseColor.GRAY);
                Font headerFont = pdf.GetFont();

                PdfPCell textCell = new PdfPCell(new Phrase("XXXXXX股份有限公司", headerFont));
                textCell.HorizontalAlignment = Element.ALIGN_RIGHT;
                textCell.VerticalAlignment = Element.ALIGN_BOTTOM;
                textCell.Border = Rectangle.NO_BORDER;

                headerTable.AddCell(imageCell1);
                headerTable.AddCell(textCell);

                headerTable.WriteSelectedRows(0, -1, doc.Left, doc.Top + 60, writer.DirectContent);
            }

            private void Footer(PdfWriter writer, Document doc)
            {
                // Add footer with page number
                PdfPTable footerTable = new PdfPTable(1);
                footerTable.DefaultCell.Border = Rectangle.NO_BORDER;
                footerTable.WidthPercentage = 100;
                footerTable.HorizontalAlignment = Element.ALIGN_CENTER;
                footerTable.TotalWidth = doc.PageSize.Width - doc.LeftMargin - doc.RightMargin; // Set table width
                footerTable.LockedWidth = true; // Lock the table width

                int pageNumber = writer.PageNumber;
                int totalPages = writer.CurrentPageNumber; // Exclude the cover page

                pdf.SetFont(9, Font.NORMAL, BaseColor.GRAY);
                Font footFont = pdf.GetFont();
                PdfPCell footerCell = new PdfPCell(new Phrase($"{totalPages}", footFont));
                footerCell.HorizontalAlignment = Element.ALIGN_CENTER;
                footerCell.Border = Rectangle.NO_BORDER;

                footerTable.AddCell(footerCell);

                footerTable.WriteSelectedRows(0, -1, doc.Left, doc.Bottom - 50, writer.DirectContent);
            }
        }
        #endregion
    }
}




TechX —— 心探索、心进取!

每一次跌倒都是一次成长

每一次努力都是一次进步

END
感谢您阅读本篇博客!希望这篇内容对您有所帮助。如果您有任何问题或意见,或者想要了解更多关于本主题的信息,欢迎在评论区留言与我交流。我会非常乐意与大家讨论和分享更多有趣的内容。
如果您喜欢本博客,请点赞和分享给更多的朋友,让更多人受益。同时,您也可以关注我的博客,以便及时获取最新的更新和文章。
在未来的写作中,我将继续努力,分享更多有趣、实用的内容。再次感谢大家的支持和鼓励,期待与您在下一篇博客再见!

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

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

相关文章

最靓丽的C++开源通知弹框SnoreToasts自动监听软件及网页通知

SnoreToasts&#xff0c;作为一款轻量级的C开源项目&#xff0c;为开发者提供了一个便捷的方式来在Windows操作系统上展示通知弹框&#xff08;Toast Notifications&#xff09;。 特点与优势 轻量级&#xff1a;SnoreToasts采用了简洁的代码设计&#xff0c;避免了不必要的依…

SQLServer:从数据类型 varchar 转换为 numeric 时出错。

1.工作要求 计算某两个经纬度距离 2.遇到问题 从数据类型 varchar 转换为 numeric 时出错。 3.解决问题 项目版本较老&#xff0c;使用SQLServer 2012 计算距离需执行视图&#xff0c;如下&#xff1a; SET QUOTED_IDENTIFIER ON SET ANSI_NULLS ON GO ALTER view vi_ord…

「前端」快速排序算法演示

快速排序算法演示。 布局描述 一个简单的HTML页面,用户可以在其中输入一系列用逗号分隔的数字。 一个CSS样式表,提供了一个美观大方的布局和样式。 一个JavaScript脚本,实现了快速排序算法,并在用户点击按钮时对输入的数字进行排序,并显示结果。 效果演示 核心代码 <…

PyPDF2拆分PDF文件的高级应用:指定拆分方式

本文目录 前言一、拆分方式选择1、代码讲解2、实现效果图3、完整代码前言 前两篇文章,分别讲解了将使用PyPDF2将PDF文档分割成为单个页面、在分割PDF文档时指定只分割出指定页面,如果你还没有看过,然后有需要的话,可以去看一下,我把文章链接贴到这里: PyPDF2拆分PDF文件…

苹果可能与谷歌大模型合作,马斯克xAI下个月推出Grok-2,比尔·盖茨:Scaling Law快要走到尽头

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 更多资源欢迎关注 1、苹果被曝 Gemini 模型今秋或融入苹果智能生态系统 苹果知名爆料人马克古尔曼&#xff08;Mark Gurman&#xff09;最新透露&#xff0c;苹果公司将于今年秋季宣布与Alphabet旗下的谷歌的大模型Gem…

计算机网络网络层复习题2

一. 单选题&#xff08;共22题&#xff0c;100分&#xff09; 1. (单选题)如果 IPv4 数据报太大&#xff0c;会在传输中被分片&#xff0c;对分片后的数据报进行重组的是&#xff08; &#xff09;。 A. 中间路由器B. 核心路由器C. 下一跳路由器D. 目的主机 我的答案: D:目的…

如何学好自动化测试

1. 什么是自动化测试 自动化测试是使用脚本和工具来执行测试任务&#xff0c;以替代手工测试过程。它可以提高效率、减少人工错误&#xff0c;并增加测试覆盖率。在软件开发过程中&#xff0c;自动化测试已经成为了不可或缺的一部分。 自动化测试主要有以下好处&#xff1a; …

《人人都是产品经理》:大产品

《人人都是产品经理》&#xff1a;大产品 产品之大时间之大空间之大&#xff1a;商业、产品、技术设计之大以写书为例 团队之大 回答一个问题 产品经理应该是管理者嘛&#xff1f;优点在于&#xff1a;缺点在于&#xff1a;总结&#xff1a; 如何让团队更加开心总结 产品之大 …

Android线性布局的概念与属性

线性布局(LinearLayout)是Android中最简单的布局方式&#xff0c;线性布局方式会使得所有在其内部的控件或子布局按一条水平或垂直的线排列。如图所示&#xff0c;图a是纵向线性布局示意图&#xff0c;图b是横向线性布局示意图。 a&#xff09;纵向线性布局示意图 …

JAVA每日作业day7.1-7.3小总结

ok了家人们前几天学了一些知识&#xff0c;接下来一起看看吧 一.API Java 的 API &#xff08; API: Application( 应用 ) Programming( 程序 ) Interface(接口 ) &#xff09; Java API 就是 JDK 中提供给我们使用的类&#xff0c;这些类将底层 的代码实现封装了起来&#x…

仓库货物管理系统

摘 要 随着信息技术的迅猛发展&#xff0c;大数据已经成为推动各行各业变革的重要力量。特别是在物流仓储领域&#xff0c;大数据技术的应用不仅能够显著提升仓库货物管理的效率&#xff0c;还能够优化库存管理、减少成本、提高客户满意度。因此&#xff0c;基于大数据的仓库货…

第二十一章 网络编程

​ 一、网络的相关概念 1. 网络通信 &#xff08;1&#xff09;网络通信&#xff1a;将 数据 通过网络从一台设备传输到另一台设备 &#xff08;2&#xff09;java.net 包下提供了一系列的类或接口&#xff0c;完成网络通信 2. 网络 概念&#xff1a;两台或多台设备通过一定…

git配置ssh-keygen -t rsa -c“xxxx@xxxx.com.cn出现Too many arguments.解决办法

git配置ssh-keygen -t rsa -c"xxxxxxxx.com.cn出现Too many arguments.解决办法 问题描述 配置Git公钥私钥时候输入命令ssh-keygen -t rsa -c"xxxxxxxx.com.cn出现Too many arguments. 解决办法&#xff1a; 提示输入的参数格式不正确&#xff0c;需要注意这几个地…

鸿蒙开发设备管理:【@ohos.settings (设置数据项名称)】

设置数据项名称 说明&#xff1a; 本模块首批接口从API version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 本模块提供设置数据项的访问功能相关接口的说明及示例。 导入模块 import settings from ohos.settings;settings.getUri…

使用Charles实现Android抓包,附带Charles破解教程

1.下载Charles 网址&#xff1a;下载Charles 安装完成后的界面&#xff1a; 2.配置http抓包 点击该选项 可以看到代理的 ip 和端口号 然后在手机的wifi中配置代理&#xff08;手机和电脑要在同一局域网&#xff09;&#xff0c;代理选择手动&#xff0c;并填入ip和端…

GPT-5即将登场:AI赋能下的未来工作与日常生活新图景

随着OpenAI首席技术官米拉穆拉蒂在近期采访中的明确表态&#xff0c;GPT-5的发布已不再是遥不可及的梦想&#xff0c;而是即将在一年半后与我们见面的现实。这一消息无疑在科技界乃至全社会引发了广泛关注和热烈讨论。从GPT-4到GPT-5的飞跃&#xff0c;被形容为从高中生到博士生…

MySQL 图形化界面

填完信息之后&#xff0c;圆圈处可以验证是否可以连接数据库 展示所有数据库&#xff08;因为有的可能连上&#xff0c;却没有数据库显示&#xff09;

每日一道算法题 组合

题目 77. 组合 - 力扣&#xff08;LeetCode&#xff09; Python 体会一下Python的高开发效率 class Solution:def combine(self, n: int, k: int) -> List[List[int]]:from itertools import combinationsreturn list(combinations(range(1,n1),k)) 第二种解法如下&…

2024高考作文题“人工智能”

今年开年到现在&#xff0c;明显的感受就是&#xff0c;咨询人工智能机器人的客户比往年更多了。什么原因&#xff0c;是因为人工成本太高了&#xff0c;今年整体经济环境变差&#xff0c;招不起人&#xff0c;所以想用AI机器人来降低用工成本吗&#xff1f; 还是说因为语音线路…

上位机第二弹

之前写的代码用上了 现在想想 &#xff0c;北向一侧还挺难搞&#xff0c;设计很巧妙