当前位置: 首页 > news >正文

wpf .netcore 导出pdf文件

PdfTableHelper.cs

 public class PdfTableHelper{/// <summary>/// 表一 基本信息/// </summary>public static PdfModels Table1 { get; set; } = new();/// <summary>/// 表二 程序参数/// </summary>public static PdfModels Table2 { get; set; } = new();/// <summary>/// 第三部分 表格的集合/// </summary>public static List<PdfModels> TileTables { get; set; } = new();/// <summary>/// 标准曲线 缓存图片的地方/// </summary>public static Image Img { get; set; } = null;public static string Formula { get; set; } = null;/// <summary>/// 设置字号与字体颜色/// </summary>/// <returns></returns>static Font SetFontSizeColor(){BaseFont bfchinese = BaseFont.CreateFont("C:\\Windows\\Fonts\\msyh.ttc,1", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);var ChFont = new Font(bfchinese, 8, Font.NORMAL, iTextSharp.text.Color.BLACK);return ChFont;}/// <summary>/// 创建一行N列表格/// </summary>/// <param name="columnNameList">列的元素</param>/// <param name="fontSize">字号大小</param>/// <returns></returns>static PdfPTable CreateOneRowTableForTiltle(List<string> columnNameList){// 定义表格对象,参数是该表格的列数var table = new PdfPTable(columnNameList.Count){// 实现自动换页SplitLate = false,SplitRows = true};try{// 获取字号BaseFont bfchinese = BaseFont.CreateFont("C:\\Windows\\Fonts\\msyh.ttc,1", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);var font = new Font(bfchinese, 10, Font.NORMAL, iTextSharp.text.Color.BLACK);// 定义单元格对象PdfPCell cell;int rowCount = columnNameList.Count;for (int i = 0; i < rowCount; i++){if (columnNameList[i] == null) { columnNameList[i] = string.Empty; }if (columnNameList[i] != null){// 将内容绑定到单元格中cell = new PdfPCell(new Phrase(columnNameList[i], font)){BorderWidthLeft = 0,BorderWidthRight = 0,BorderWidthTop = 0,BorderColorLeft = iTextSharp.text.Color.WHITE,BorderColorRight = iTextSharp.text.Color.WHITE,BorderColorTop = iTextSharp.text.Color.WHITE,HorizontalAlignment = 0,   // 居中PaddingBottom = 5};table.AddCell(cell);var cellBlankRow = new PdfPCell(new Phrase(" ")){FixedHeight = 5,BorderWidthLeft = 0,BorderWidthRight = 0,BorderWidthTop = 0,BorderWidthBottom = 0,BorderColorLeft = iTextSharp.text.Color.WHITE,BorderColorRight = iTextSharp.text.Color.WHITE,BorderColorTop = iTextSharp.text.Color.WHITE};table.AddCell(cellBlankRow);}}}catch (Exception ex){LogHelper.GetSingleObj().WriteLog(ex);}return table;}/// <summary>/// 创建一行N列表格/// </summary>/// <param name="columnNameList">列的元素</param>/// <param name="fontSize">字号大小</param>/// <returns></returns>static PdfPTable CreateOneRowTable(List<string> columnNameList, bool hasLine = false){// 定义表格对象,参数是该表格的列数var table = new PdfPTable(columnNameList.Count){// 实现自动换页SplitLate = false,SplitRows = true};try{// 获取字号Font font = SetFontSizeColor();// 定义单元格对象PdfPCell cell;int rowCount = columnNameList.Count;for (int i = 0; i < rowCount; i++){if (columnNameList[i] == null) { columnNameList[i] = string.Empty; }if (columnNameList[i] != null){// 将内容绑定到单元格中cell = new PdfPCell(new Phrase(columnNameList[i], font)){HorizontalAlignment = Element.ALIGN_CENTER, // 居中VerticalAlignment = Element.ALIGN_MIDDLE // 垂直居中};if (hasLine == false){cell.Border = Rectangle.NO_BORDER; // 去掉边框}table.AddCell(cell);}}}catch (Exception ex){LogHelper.GetSingleObj().WriteLog(ex);}return table;}/// <summary>/// 创建一行N列表格/// </summary>/// <param name="columnNameList">列的元素</param>/// <param name="fontSize">字号大小</param>/// <returns></returns>static PdfPTable CreateOneRowTableOneLeft(List<string> columnNameList, bool hasLine = false){// 定义表格对象,参数是该表格的列数var table = new PdfPTable(columnNameList.Count){// 实现自动换页SplitLate = false,SplitRows = true};try{// 获取字号Font font = SetFontSizeColor();// 定义单元格对象PdfPCell cell;int rowCount = columnNameList.Count;for (int i = 0; i < rowCount; i++){if (columnNameList[i] == null) { columnNameList[i] = string.Empty; }if (columnNameList[i] != null){if (rowCount == 1){// 将内容绑定到单元格中cell = new PdfPCell(new Phrase(columnNameList[i], font)){HorizontalAlignment = Element.ALIGN_LEFT, // 居中VerticalAlignment = Element.ALIGN_MIDDLE // 垂直居中};}else{// 将内容绑定到单元格中cell = new PdfPCell(new Phrase(columnNameList[i], font)){HorizontalAlignment = Element.ALIGN_CENTER, // 居中VerticalAlignment = Element.ALIGN_MIDDLE // 垂直居中};}if (hasLine == false){cell.Border = Rectangle.NO_BORDER; // 去掉边框}table.AddCell(cell);}}}catch (Exception ex){LogHelper.GetSingleObj().WriteLog(ex);}return table;}/// <summary>/// 创建一行N列表格/// </summary>/// <param name="columnNameList">列的元素</param>/// <param name="fontSize">字号大小</param>/// <returns></returns>static PdfPTable CreateCellHasImg(List<string> columnNameList, bool hasLine = false){// 定义表格对象,参数是该表格的列数var table = new PdfPTable(columnNameList.Count){// 实现自动换页SplitLate = false,SplitRows = true};try{// 获取字号Font font = SetFontSizeColor();// 定义单元格对象PdfPCell cell;int rowCount = columnNameList.Count;for (int i = 0; i < rowCount; i++){if (columnNameList[i] == null) { columnNameList[i] = string.Empty; }if (columnNameList[i] != null){if (columnNameList[i].Contains("ResultImag")){string s = columnNameList[i].Substring(columnNameList[i].Length - 1);if (!string.IsNullOrEmpty(s) && int.TryParse(s, out int ispass)){ImageSource imageSource;if (ispass == 0){imageSource = (ImageSource)new ImageSourceConverter().ConvertFromString("pack://application:,,,/YouMin_MicroplateReader;component/Images/UnPass.png");}else{imageSource = (ImageSource)new ImageSourceConverter().ConvertFromString("pack://application:,,,/YouMin_MicroplateReader;component/Images/Pass.png");}// 将 ImageSource 转换为 BitmapSourceif (imageSource is System.Windows.Media.Imaging.BitmapSource bitmapSource && bitmapSource != null){using var memoryStream = new MemoryStream(); // 创建一个字节数组并将 BitmapSource 保存到该字节数组中                                  var encoder = new System.Windows.Media.Imaging.PngBitmapEncoder();  // 使用 PngBitmapEncoder 将 BitmapSource 保存为 PNG 格式encoder.Frames.Add(System.Windows.Media.Imaging.BitmapFrame.Create(bitmapSource));encoder.Save(memoryStream);// 创建 iTextSharp 的图像byte[] byteArray = memoryStream.ToArray();var iTextImage = Image.GetInstance(byteArray);// 创建单元格并添加图像cell = new PdfPCell(iTextImage, true){FixedHeight = 5,HorizontalAlignment = Element.ALIGN_CENTER, // 居中VerticalAlignment = Element.ALIGN_MIDDLE // 垂直居中};table.AddCell(cell);}}}else{// 将内容绑定到单元格中cell = new PdfPCell(new Phrase(columnNameList[i], font)){HorizontalAlignment = Element.ALIGN_CENTER, // 居中VerticalAlignment = Element.ALIGN_MIDDLE // 垂直居中};if (hasLine == false){cell.Border = Rectangle.NO_BORDER; // 去掉边框}table.AddCell(cell);}}}}catch (Exception ex){LogHelper.GetSingleObj().WriteLog(ex);}return table;}/// <summary>/// 用于添加行 并有一个空白行进行分隔/// </summary>/// <param name="tileTable"></param>/// <param name="linebreak"></param>/// <param name="linebreakColcount"></param>/// <returns></returns>static PdfPTable CreatePrintTable(PdfModels tileTable, bool linebreak = false, int linebreakColcount = 3, bool hasLine = false){//创建第一个表格var title = new List<string>{tileTable.TableTile};var tableMain1 = CreateOneRowTableForTiltle(title);//创建标题//创建行var tableMainrows = new List<PdfPTable>{tableMain1//把表头添加上去};try{///添加行数据if (linebreak == false){if (tileTable.Rows?.Count > 0){foreach (var item in tileTable.Rows){var rowcols = new List<string>();if (!string.IsNullOrEmpty(item.Key)){rowcols.Add(item.Key);}rowcols.AddRange(item.Value);tableMainrows.Add(CreateOneRowTable(rowcols, hasLine));}}}else//列过多换行{if (tileTable.Rows.Count > 0){var cspcount = Math.Ceiling((double)tileTable.Rows[0].Value.Count / linebreakColcount);//分次数取行for (int i = 0; i < cspcount; i++){var Skipcount = i * linebreakColcount;foreach (var item in tileTable.Rows){var rowcols = new List<string>();if (!string.IsNullOrEmpty(item.Key)){rowcols.Add(item.Key);}rowcols.AddRange(item.Value.Skip(Skipcount).Take(linebreakColcount));tableMainrows.Add(CreateOneRowTable(rowcols, hasLine));}}}}}catch (Exception ex){LogHelper.GetSingleObj().WriteLog(ex);}var printtable = MergeMultTable(tableMainrows);return printtable;}/// <summary>/// 用于添加行 并有一个空白行进行分隔/// </summary>/// <param name="tileTable"></param>/// <param name="linebreak"></param>/// <param name="linebreakColcount"></param>/// <returns></returns>static PdfPTable CreatePrintTableOneLeft(PdfModels tileTable, bool linebreak = false, int linebreakColcount = 3, bool hasLine = false){var title = new List<string> { tileTable.TableTile };  //创建第一个表格var tableMain1 = CreateOneRowTableForTiltle(title);//创建标题//创建行var tableMainrows = new List<PdfPTable>{tableMain1//把表头添加上去};try{///添加行数据if (linebreak == false){if (tileTable.Rows?.Count > 0){foreach (var item in tileTable.Rows){var rowcols = new List<string>();if (!string.IsNullOrEmpty(item.Key)){rowcols.Add(item.Key);}rowcols.AddRange(item.Value);tableMainrows.Add(CreateOneRowTableOneLeft(rowcols, hasLine));}}}else//列过多换行{if (tileTable.Rows.Count > 0){var cspcount = Math.Ceiling((double)tileTable.Rows[0].Value.Count / linebreakColcount);//分次数取行for (int i = 0; i < cspcount; i++){var Skipcount = i * linebreakColcount;foreach (var item in tileTable.Rows){var rowcols = new List<string>();if (!string.IsNullOrEmpty(item.Key)){rowcols.Add(item.Key);}rowcols.AddRange(item.Value.Skip(Skipcount).Take(linebreakColcount));tableMainrows.Add(CreateOneRowTableOneLeft(rowcols, hasLine));}}}}}catch (Exception ex){LogHelper.GetSingleObj().WriteLog(ex);}var printtable = MergeMultTable(tableMainrows);return printtable;}/// <summary>/// 用于添加行 并有一个空白行进行分隔/// </summary>/// <param name="tileTable"></param>/// <param name="linebreak"></param>/// <param name="linebreakColcount"></param>/// <returns></returns>static PdfPTable CreatePrintTableCellHasImg(PdfModels tileTable, bool linebreak = false, int linebreakColcount = 3, bool hasLine = false){//创建第一个表格var title = new List<string>{tileTable.TableTile};var tableMain1 = CreateOneRowTableForTiltle(title);//创建标题//创建行var tableMainrows = new List<PdfPTable>{tableMain1//把表头添加上去};try{///添加行数据if (linebreak == false){if (tileTable.Rows?.Count > 0){foreach (var item in tileTable.Rows){var rowcols = new List<string>();if (!string.IsNullOrEmpty(item.Key)){rowcols.Add(item.Key);}rowcols.AddRange(item.Value);tableMainrows.Add(CreateCellHasImg(rowcols, hasLine));}}}else//列过多换行{if (tileTable.Rows.Count > 0){var cspcount = Math.Ceiling((double)tileTable.Rows[0].Value.Count / linebreakColcount);//分次数取行for (int i = 0; i < cspcount; i++){var Skipcount = i * linebreakColcount;foreach (var item in tileTable.Rows){var rowcols = new List<string>();if (!string.IsNullOrEmpty(item.Key)){rowcols.Add(item.Key);}rowcols.AddRange(item.Value.Skip(Skipcount).Take(linebreakColcount));tableMainrows.Add(CreateCellHasImg(rowcols, hasLine));}}}}}catch (Exception ex){LogHelper.GetSingleObj().WriteLog(ex);}var printtable = MergeMultTable(tableMainrows);return printtable;}/// <summary>/// 用于添加图片 现在只有标准曲线/// </summary>/// <param name="tileTable"></param>/// <returns></returns>static PdfPTable CreatePrintImgTable(PdfModels tileTable, Image img){try{var title1 = new List<string> { tileTable.TableTile }; //创建第一个表格                         var tableMain1 = CreateOneRowTableForTiltle(title1);  //创建标题List<PdfPTable> tableMainrows;if (!string.IsNullOrEmpty(Formula)){var FList = Formula.Split('\t');if (FList.Length == 2){Formula = FList[0] + "\u00A0   " + FList[1];}var title2 = new List<string> { Formula };//创建第一个表格          var tableMain2 = CreateOneRowTable(title2);  //创建标题 tableMainrows = new List<PdfPTable>{tableMain1,tableMain2};//创建行把表头添加上去}else{tableMainrows = new List<PdfPTable> { tableMain1 };//创建行把表头添加上去}var printtable = MergeMultTable(tableMainrows);var cell = new PdfPCell(img, true){Border = Rectangle.NO_BORDER, // 去掉边框HorizontalAlignment = Element.ALIGN_CENTER, // 居中VerticalAlignment = Element.ALIGN_MIDDLE // 垂直居中};printtable.AddCell(cell);return printtable;}catch (Exception ex){LogHelper.GetSingleObj().WriteLog(ex);return null;}}public static bool WritePdf(string FileName){bool result = false;try{// 创建PDF文件using (var pdfFs = new FileStream(FileName, FileMode.Create)){var rectangle = new Rectangle(PageSize.A4);//页面大小(画出矩形轮廓)                                                              var doc = new Document(rectangle); // 获取实例doc.SetMargins(5, 5, 5, 5);//页边空白                    PdfWriter.GetInstance(doc, pdfFs);// 打开pdfdoc.Open();if (Table1 != null){var printtable1 = CreatePrintTable(Table1);doc.Add(printtable1);//添加到打印对象doc.Add(GetBlankRow());}if (Table2 != null){var printtable2 = CreatePrintTable(Table2);doc.Add(printtable2);//添加到打印对象doc.Add(GetBlankRow());}if (TileTables?.Count > 0){foreach (var item in TileTables){var tmpprinttable = CreatePrintTable(item, true, item.Count, item.HasLine);doc.Add(tmpprinttable);//添加到打印对象doc.Add(GetBlankRow());}}if (Img != null){var imgTitle = new PdfModels{TableTile = Util.FindKey("StandardCurve")};var imagtable1 = CreatePrintImgTable(imgTitle, Img);if (imagtable1 != null){doc.Add(imagtable1);}}// 关闭doc.Close();}result = true;}catch (Exception ex){LogHelper.GetSingleObj().WriteLog(ex);}return result;}public static bool WritePdfOneLeft(string FileName){bool result = false;try{// 创建PDF文件using (var pdfFs = new FileStream(FileName, FileMode.Create)){var rectangle = new Rectangle(PageSize.A4);//页面大小(画出矩形轮廓)// 获取实例var doc = new Document(rectangle);doc.SetMargins(10, 10, 10, 10);//页边空白                    PdfWriter.GetInstance(doc, pdfFs);// 打开pdfdoc.Open();if (Table1 != null){var printtable1 = CreatePrintTableOneLeft(Table1);doc.Add(printtable1);//添加到打印对象doc.Add(GetBlankRow());}if (Table2 != null){var printtable2 = CreatePrintTableOneLeft(Table2);doc.Add(printtable2);//添加到打印对象doc.Add(GetBlankRow());}if (TileTables?.Count > 0){foreach (var item in TileTables){var tmpprinttable = CreatePrintTableOneLeft(item, true, item.Count, item.HasLine);doc.Add(tmpprinttable);//添加到打印对象doc.Add(GetBlankRow());}}if (Img != null){var imgTitle = new PdfModels{TableTile = Util.FindKey("StandardCurve")};var imagtable1 = CreatePrintImgTable(imgTitle, Img);if (imagtable1 != null){doc.Add(imagtable1);}}// 关闭doc.Close();}result = true;}catch (Exception ex){LogHelper.GetSingleObj().WriteLog(ex);}return result;}public static bool WritePdfCellHasImg(string FileName){bool result = false;try{// 创建PDF文件using (var pdfFs = new FileStream(FileName, FileMode.Create)){var rectangle = new Rectangle(PageSize.A4);//页面大小(画出矩形轮廓)// 获取实例var doc = new Document(rectangle);doc.SetMargins(10, 10, 10, 10);//页边空白                    PdfWriter.GetInstance(doc, pdfFs);// 打开pdfdoc.Open();if (Table1 != null){var printtable1 = CreatePrintTable(Table1);doc.Add(printtable1);//添加到打印对象doc.Add(GetBlankRow());}if (Table2 != null){var printtable2 = CreatePrintTable(Table2);doc.Add(printtable2);//添加到打印对象doc.Add(GetBlankRow());}if (TileTables?.Count > 0){foreach (var item in TileTables){var tmpprinttable = CreatePrintTableCellHasImg(item, true, item.Count, item.HasLine);doc.Add(tmpprinttable);//添加到打印对象doc.Add(GetBlankRow());}}if (Img != null){var imgTitle = new PdfModels{TableTile = Util.FindKey("StandardCurve")};var imagtable1 = CreatePrintImgTable(imgTitle, Img);if (imagtable1 != null){doc.Add(imagtable1);}}// 关闭doc.Close();}result = true;}catch (Exception ex){LogHelper.GetSingleObj().WriteLog(ex);}return result;}public static void WritePdfForOne(string path){try{using var pdfFs = new FileStream(path, FileMode.Create);// 创建PDF文件               var doc = new Document(); // 获取实例PdfWriter.GetInstance(doc, pdfFs);// 打开pdfdoc.Open();if (TileTables?.Count > 0){foreach (var item in TileTables){var tmpprinttable = CreatePrintTable(item, true, 8);doc.Add(tmpprinttable);//添加到打印对象}}// 关闭doc.Close();}catch (Exception ex){LogHelper.GetSingleObj().WriteLog(ex);}}/// <summary>/// 生成默认空白行/// </summary>/// <returns></returns>public static Paragraph GetBlankRow(){var blankRow = new Paragraph(" ", SetFontSizeColor());//设置字号大小和样式blankRow.SetAlignment(Element.ALIGN_CENTER.ToString());blankRow.SetLeading(10, 0);//行间距return blankRow;}/// <summary>/// 合并两个表格/// </summary>/// <param name="table1"></param>/// <param name="table2"></param>/// <returns></returns>public static PdfPTable MergeTwoTable(PdfPTable table1, PdfPTable table2){var table = new PdfPTable(1) // 定义表格对象,参数代表是该表格一共由多少列{// 实现自动换页SplitLate = false,SplitRows = true};try{PdfPCell cell;// 定义单元格对象// 这个函数写死是合并两个单元格int rowCount = 2;for (int i = 0; i < rowCount; i++){switch (i){case 0:// 单元格中添加表格1cell = new PdfPCell(table1){// 居中Padding = 0};// 将单元格添加到表格中table.AddCell(cell);break;case 1:cell = new PdfPCell(table2){Padding = 0};table.AddCell(cell);break;default:break;}}}catch (Exception ex){LogHelper.GetSingleObj().WriteLog(ex);}// 最后将合并好的表格返回return table;}/// <summary>/// 合并多个表格/// </summary>/// <param name="pdfList"></param>/// <returns></returns>public static PdfPTable MergeMultTable(List<PdfPTable> pdfList){var table = new PdfPTable(1){SplitLate = false,SplitRows = true};try{PdfPCell cell;// 将表格绑定到单元格中,然后将单元格插入汇总表格if (pdfList != null && pdfList.Any()){foreach (PdfPTable pdf in pdfList){cell = new PdfPCell(pdf){Border = Rectangle.NO_BORDER, // 去掉边框HorizontalAlignment = Element.ALIGN_CENTER, // 居中VerticalAlignment = Element.ALIGN_MIDDLE, // 垂直居中Padding = 0};table.AddCell(cell);}}}catch (Exception ex){LogHelper.GetSingleObj().WriteLog(ex);}return table;}}

PdfModels.cs

public partial class PdfModels : ObservableObject{public PdfModels() { Rows = new List<KeyValuePair<string, List<string>>>(); }/// <summary>/// 表格标题/// </summary>public string TableTile { get; set; } = string.Empty;public int Count { get; set; } = 12;public bool HasLine { get; set; } = false;public List<KeyValuePair<string, List<string>>> Rows { get; set; }}

 方法里的实现

using var folderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog();if (folderBrowserDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK){var selectedPath = folderBrowserDialog.SelectedPath;//注册编码提供程序 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);PdfTableHelper.TileTables = new List<PdfModels>();PdfTableHelper.Formula = null;PdfTableHelper.Img = null;string FileName = Path.Combine(selectedPath, $"{xxxx}.pdf");var fi = new FileInfo(FileName);if (fi.Directory != null && !fi.Directory.Exists){fi.Directory.Create();}if (File.Exists(FileName)){Application.Current.Dispatcher.Invoke(() =>{if (new IsDeleteWin("HasFile").ShowDialog() == false){return;}});}PdfTableHelper.Table1 = new PdfModels();PdfTableHelper.Table2 = new PdfModels();PdfTableHelper.TileTables = new List<PdfModels>();//构造第一个表格PdfTableHelper.Table1.TableTile = Util.FindKey("BaseInformation");PdfTableHelper.Table1.Rows = new List<KeyValuePair<string, List<string>>>(){new KeyValuePair<string, List<string>>("111",new List<string>(){111}),new KeyValuePair<string, List<string>>("222",new List<string>(){ 222 })};//构造第二个表格PdfTableHelper.Table2.TableTile = Util.FindKey("ProgramParameters");PdfTableHelper.Table2.Rows = new List<KeyValuePair<string, List<string>>>();PdfTableHelper.Table2.Rows.Add(new KeyValuePair<string, List<string>>("333"), new List<string>() { "333" }));model = new PdfModels(){TableTile = xxx};model.Rows.Add(new KeyValuePair<string, List<string>>("444"),new List<string>() { "1", "2", "3", "4", "5", "6" }));foreach (var Temp in TempList){model.Rows.Add(new KeyValuePair<string,List<string>>(Temp.Hole, new List<string>(){Temp.111,Temp.222,Temp.333,Temp.444,Temp.555,Temp.666}));}PdfTableHelper.TileTables.Add(model);PdfTableHelper.WritePdf(FileName);}


文章转载自:

http://DfHbjOAM.jkcnq.cn
http://9ODZudAT.jkcnq.cn
http://ZzYguItm.jkcnq.cn
http://4GEWGSsS.jkcnq.cn
http://yvqBL94R.jkcnq.cn
http://2B4uHaHU.jkcnq.cn
http://M0WPs1qx.jkcnq.cn
http://c4aZMl3u.jkcnq.cn
http://FehDgl7Y.jkcnq.cn
http://rlQksJZo.jkcnq.cn
http://8P1IfoXr.jkcnq.cn
http://ytJlJGt9.jkcnq.cn
http://lkjRzQib.jkcnq.cn
http://vM7SBpHj.jkcnq.cn
http://PgfD2zRP.jkcnq.cn
http://ae2fefDs.jkcnq.cn
http://ikIoxZ43.jkcnq.cn
http://dF0eImf5.jkcnq.cn
http://Mbq1kbTK.jkcnq.cn
http://DcePcfO5.jkcnq.cn
http://uSXzaVwB.jkcnq.cn
http://MCLNmHAq.jkcnq.cn
http://mJZbRWOr.jkcnq.cn
http://B0Mpd99n.jkcnq.cn
http://MYrs5tSz.jkcnq.cn
http://qDWLsxtm.jkcnq.cn
http://cmkfNWxR.jkcnq.cn
http://4TAeCyIZ.jkcnq.cn
http://UQqAnQFT.jkcnq.cn
http://wFpbioOo.jkcnq.cn
http://www.dtcms.com/a/372949.html

相关文章:

  • 6个步骤实现Postman接口压力测试
  • Linux-expect脚本编程
  • Dart 聊天后端开发(MongoDB + WebSocket)
  • Linux初始——自动化构建
  • Linux之GDB调试
  • 通俗理解 LSTM 的三门机制:从剧情记忆到科学原理
  • MyBatis-Plus中 IService 与 ServiceImpl等内容的深入思考理解
  • Android使用ReactiveNetwork监听网络连通性
  • 大学信息查询平台:一个现代化的React教育项目
  • 基于 GitHub Actions 的零成本自动化部署:把 Vite/Vue3 项目一键发布到 GitHub Pages 的完整实战
  • 制造企业如何实现ERP/OA/CRM/WMS等多系统贯通
  • 2025年5月架构设计师案例分析真题回顾,附参考答案、解析及所涉知识点(五)
  • 【python面向对象编程】迭代器与生成器
  • 查验接口:筑牢游戏防沉迷系统的 “数字防线”
  • 从目标到优化设计:由 Stochos 和 GenAI 提供支持的 Web 应用程序生成
  • Easy ES技术详解
  • 【C++】C++11的包装器:function与bind简介
  • C++微基础备战蓝桥杯之旅
  • 解构服务于构建
  • 天津大学智算2026预推免机试第二批题目及代码c++
  • 杰理烧录ERROR: Data error after erasing, address = 0x430000
  • Spring Cloud Alibaba快速入门02-Nacos(下)
  • DA-WSOL
  • FlutterActivity vs FlutterFragmentActivity:全面对比与最佳实践
  • 算法高频题
  • Aider AI Coding 项目 LLM 模型管理 深度分析
  • Spring事件监听机制(三)
  • 设计模式之单例模式大全---java实现
  • Separated collaborative learning
  • Microsoft Visual C++ 运行库安装教程(最新版完整指南 | DLL修复方案)