Unity之创建与导出PDF

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

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;}#endregionpublic void AddPage(){document.NewPage();}#region 添加段落/// <summary>/// 空格/// 加入空行,用以区分上下行/// </summary>public void AddNullLine(int nullLine=1,int lightHeight=12){// Change this to the desired number of empty linesint 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_EDITORAssetDatabase.Refresh();
#endif}Application.OpenURL(filePath);}#region FirstPageprivate 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 widthheaderTable.LockedWidth = true; // Lock the table widthImage image1 = Image.GetInstance(reportExporter.imagePath1);// Add images to the headerimage1.ScaleAbsolute(image1.Width / 2, image1.Height / 2);PdfPCell imageCell1 = new PdfPCell(image1);imageCell1.Border = Rectangle.NO_BORDER;// Add text to the headerpdf.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 numberPdfPTable 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 widthfooterTable.LockedWidth = true; // Lock the table widthint pageNumber = writer.PageNumber;int totalPages = writer.CurrentPageNumber; // Exclude the cover pagepdf.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.mzph.cn/bicheng/39816.shtml

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

相关文章

PyPDF2指定范围拆分PDF文件为单个页面

本文目录 前言一、指定范围拆分PDF1、过程讲解2、拆分效果图3、完整代码二、其他问题1、更改页码索引值前言 上一篇文章讲解了怎么讲一个PDF文档分割为多个单页面PDF,本文来讲解一下进阶,就是指定范围拆分PDF页面,有的时候,我们只想把PDF文档中的某几页拆分出来,而不是全…

mmcv安装失败及解决方案

假如想安装的版本是mmcv1.4.0, 但是pip install mmcv1.4.0总是失败&#xff0c;若是直接pip install mmcv会安装成功&#xff0c;但是安装的就是最新版本&#xff0c;后面代码跑起来还会报错&#xff0c;怎么办呢&#xff1f; 接下来分享一个mmcv指定版本安装的方式。 网页&a…

数据存储方案选择:ES、HBase、Redis、MySQL与MongoDB的应用场景分析

一、概述 1.1 背景 在当今数据驱动的时代&#xff0c;选择合适的数据存储技术对于构建高效、可靠的信息系统至关重要。随着数据量的爆炸式增长和处理需求的多样化&#xff0c;市场上涌现出了各种数据存储解决方案&#xff0c;每种技术都有其独特的优势和适用场景。Elasticsear…

【Threejs进阶教程-着色器篇】1. Shader入门(ShadertoyShader和ThreejsShader入门)

ThreejsShader入门 关于本Shader教程认识ShaderShader和Threejs的关系WebGLShaderThreejsShaderShadertoyShader其他Shader 再次劝退数学不好的人从ShaderToy开始Shader的代码是强类型glsl的类型&#xff0c;变量&#xff0c;内置函数&#xff0c;关键字关于uv基于UV的颜色处理…

全网最详细的软件测试面试题总结+基础知识(完整版)

一、什么是软件&#xff1f; 软件是计算机系统中的程序和相关文件或文档的总称。 二、什么是软件测试&#xff1f; 说法一&#xff1a;使用人工或自动的手段来运行或测量软件系统的过程&#xff0c;以检验软件系统是否满足规定的要求&#xff0c;并找出与预期结果之间的差异…

【深海王国】小学生都能玩的语音模块?ASRPRO打造你的第一个智能语音助手(4)

Hi~ (o^^o)♪, 各位深海王国的同志们&#xff0c;早上下午晚上凌晨好呀~ 辛勤工作的你今天也辛苦啦(/≧ω) 今天大都督继续为大家带来系列——小学生都能玩的语音模块&#xff0c;帮你一周内快速学会语音模块的使用方式&#xff0c;打造一个可用于智能家居、物联网领域的语音助…

qtreewidget 美化,htmlcss和qss 不是一个概念!已解决

这种样式的美化&#xff0c; 能气死个人&#xff0c;css 一个单词搞定&#xff0c;非要 在qss中。多少个单词不知道了。 m_tree_widget->setStyleSheet("QTreeView{background:transparent; selection-background-color:transparent;}""QTreeView::branch{b…

linux 安装腾讯会议和解决ubuntu打开腾讯会议提示:不兼容 wayland 协议

一. 下载腾讯会议安装包 腾讯会议下载链接 二. 命令行安装 cd [安装包路径] sudo dpkg -i TencentMeeting_0300000000_3.19.1.400_x86_64_default.publish.deb 三. 打开腾讯会议提示无法支持wayland 协议 解决方法: 打开终端 sudo vi /etc/gdm3/custom.conf打开 #Wayland…

哪个牌子的充电宝牌子便宜好用?2024年性价比高充电宝排行榜!

在 2024 年&#xff0c;充电宝市场依旧琳琅满目&#xff0c;让人眼花缭乱。大家都在寻找那个既便宜又好用的充电宝&#xff0c;可面对众多品牌和产品&#xff0c;常常感到无从下手。别担心&#xff01;经过深入的市场调研和实际使用体验&#xff0c;我们为您精心整理出了 2024 …

轻度图像处理工具,匹敌photoshop

一、简介 1、一款功能强大的在线图片编辑工具,用户可以将其安装为渐进式网页应用(PWA)。它提供了与 Photoshop 相似的核心功能,能够满足大多数图像编辑需求,非常适合那些不愿或无法安装 Photoshop 的用户。即使使用免费版本,用户也能享受所有功能,是轻度图像处理的理想选…

实用麦克风话筒音频放大器电路设计和电路图

设计目标 输入电压最大值输出电压最大值电源Vcc电源Vee频率响应偏差20Hz频率响应偏差20kHz100dB SPL(2Pa)1.228Vrms5V0V–0.5dB–0.1dB 设计说明 此电路使用跨阻抗放大器配置中的运算放大器将驻极体炭精盒麦克风的输出电流转换为输出电压。此电路的共模电压是固定的&#xf…

动物检测yolo格式数据集(水牛 、大象 、犀牛 、斑马四类)

动物检测数据集 1、下载地址&#xff1a; https://download.csdn.net/download/qq_15060477/89512588?spm1001.2101.3001.9500 2、数据集介绍 本数据集含有四种动物可以检测&#xff0c;分别是水牛 、大象 、犀牛 、斑马四类&#xff0c;数据集格式为yolo格式&#xff0c;…

大模型对汽车行业意味着什么?_汽车企业大模型

引 言 大模型是一种利用海量数据进行训练的深度神经网络模型&#xff0c;其特点是拥有庞大的参数规模和复杂的计算结构。通过在大规模数据集上进行训练&#xff0c;大模型能够学习到丰富的模式和特征&#xff0c;从而具备强大的泛化能力&#xff0c;可以对未知数据做出准确的预…

Vue87-Vuex中的mapState、mapGetters

一、借助mapState生成计算属性&#xff0c;从state中读取数据 当vuex中的state有很多数据的时候&#xff1a; 组件中调用state中的数据 此写法不是很方便&#xff0c;借助计算属性。 计算属性的写法也不是很方便&#xff1a; 优化&#xff1a; 1-1、对象写法 注意&#xff1a…

JVM原理(十二):JVM虚拟机类加载过程

一个类型从被加载到虚拟机内存中开始&#xff0c;到卸载为止&#xff0c;它的整个生命周期将会经过 加载、验证、准备、解析、初始化、使用、卸载七个阶段。其中 验证、准备、解析三个部分统称为 连接 1. 加载 加载是整个类加载的一个过程。在加载阶段&#xff0c;Java虚拟机…

使用python编程的视频文件列表应用程序

简介&#xff1a; 在本篇博客中&#xff0c;我们将介绍一个基于 wxPython 的视频文件列表应用程序。该应用程序允许用户选择一个文件夹&#xff0c;并显示该文件夹中的视频文件列表。用户可以选择文件并查看其详细信息&#xff0c;导出文件列表为文本文件&#xff0c;以及播放…

Spring系统学习-什么是AOP?为啥使用AOP?

问题思考 我们为啥要使用AOP? 来看一个案例&#xff1a; 声明计算器接口Calculator&#xff0c;包含加减乘除的抽象方法 public interface Calculator {int add(int i, int j);int sub(int i, int j);int mul(int i, int j);int div(int i, int j); }public class Calculat…

JS(JavaScript)数据校验 表单校验-案例

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

【Rust入门】生成随机数

文章目录 前言随机数库rand添加rand库到我们的工程生成一个随机数示例代码 总结 前言 在编程中&#xff0c;生成随机数是一种常见的需求&#xff0c;无论是用于数据分析、游戏开发还是模拟实验。Rust提供了强大的库来帮助我们生成随机数。在这篇文章中&#xff0c;我们将通过一…

顺序表--续(C语言详细版)

2.9 在指定位置之前插入数据 // 在指定位置之前插入数据 void SLInsert(SL* ps, int pos, SLDataType x); 步骤&#xff1a; ① 程序开始前&#xff0c;我们要断言一下&#xff0c;确保指针是有效的&#xff0c;不是NULL&#xff1b; ② 我们还要断言一下&#xff0c;指定的…