JPG与PDF格式转换器
该插件可实现JPG与PDF格式的互转。
MainForm.Designer.cs
using System.Windows.Forms;
namespace JpgToPdfConverter
{partial class MainForm{private System.ComponentModel.IContainer components = null;protected override void Dispose(bool disposing){if (disposing && (components != null)){components.Dispose();}base.Dispose(disposing);}#region Windows Form Designer generated codeprivate void InitializeComponent(){this.btnSelectJpgFiles = new System.Windows.Forms.Button();this.lstJpgFiles = new System.Windows.Forms.ListBox();this.btnConvertJpgToPdf = new System.Windows.Forms.Button();this.lblJpgStatus = new System.Windows.Forms.Label();this.btnClearJpg = new System.Windows.Forms.Button();this.btnSelectPdfFiles = new System.Windows.Forms.Button();this.lstPdfFiles = new System.Windows.Forms.ListBox();this.btnConvertPdfToJpg = new System.Windows.Forms.Button();this.lblPdfStatus = new System.Windows.Forms.Label();this.btnClearPdf = new System.Windows.Forms.Button();this.tabControl1 = new System.Windows.Forms.TabControl();this.tabPageJpgToPdf = new System.Windows.Forms.TabPage();this.tabPagePdfToJpg = new System.Windows.Forms.TabPage();this.label1 = new System.Windows.Forms.Label();this.nudDpi = new System.Windows.Forms.NumericUpDown();this.tabControl1.SuspendLayout();this.tabPageJpgToPdf.SuspendLayout();this.tabPagePdfToJpg.SuspendLayout();((System.ComponentModel.ISupportInitialize)(this.nudDpi)).BeginInit();this.SuspendLayout();// // btnSelectJpgFiles// this.btnSelectJpgFiles.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));this.btnSelectJpgFiles.Location = new System.Drawing.Point(5, 5);this.btnSelectJpgFiles.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);this.btnSelectJpgFiles.Name = "btnSelectJpgFiles";this.btnSelectJpgFiles.Size = new System.Drawing.Size(111, 24);this.btnSelectJpgFiles.TabIndex = 0;this.btnSelectJpgFiles.Text = "选择JPG文件";this.btnSelectJpgFiles.UseVisualStyleBackColor = true;this.btnSelectJpgFiles.Click += new System.EventHandler(this.btnSelectJpgFiles_Click);// // lstJpgFiles// this.lstJpgFiles.FormattingEnabled = true;this.lstJpgFiles.HorizontalScrollbar = true;this.lstJpgFiles.ItemHeight = 12;this.lstJpgFiles.Location = new System.Drawing.Point(5, 34);this.lstJpgFiles.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);this.lstJpgFiles.Name = "lstJpgFiles";this.lstJpgFiles.Size = new System.Drawing.Size(388, 172);this.lstJpgFiles.TabIndex = 1;// // btnConvertJpgToPdf// this.btnConvertJpgToPdf.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));this.btnConvertJpgToPdf.Location = new System.Drawing.Point(5, 210);this.btnConvertJpgToPdf.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);this.btnConvertJpgToPdf.Name = "btnConvertJpgToPdf";this.btnConvertJpgToPdf.Size = new System.Drawing.Size(111, 24);this.btnConvertJpgToPdf.TabIndex = 2;this.btnConvertJpgToPdf.Text = "转换为PDF";this.btnConvertJpgToPdf.UseVisualStyleBackColor = true;this.btnConvertJpgToPdf.Click += new System.EventHandler(this.btnConvertJpgToPdf_Click);// // lblJpgStatus// this.lblJpgStatus.AutoSize = true;this.lblJpgStatus.Location = new System.Drawing.Point(122, 218);this.lblJpgStatus.Name = "lblJpgStatus";this.lblJpgStatus.Size = new System.Drawing.Size(0, 12);this.lblJpgStatus.TabIndex = 3;// // btnClearJpg// this.btnClearJpg.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));this.btnClearJpg.Location = new System.Drawing.Point(281, 210);this.btnClearJpg.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);this.btnClearJpg.Name = "btnClearJpg";this.btnClearJpg.Size = new System.Drawing.Size(111, 24);this.btnClearJpg.TabIndex = 4;this.btnClearJpg.Text = "清除列表";this.btnClearJpg.UseVisualStyleBackColor = true;this.btnClearJpg.Click += new System.EventHandler(this.btnClearJpg_Click);// // btnSelectPdfFiles// this.btnSelectPdfFiles.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));this.btnSelectPdfFiles.Location = new System.Drawing.Point(5, 5);this.btnSelectPdfFiles.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);this.btnSelectPdfFiles.Name = "btnSelectPdfFiles";this.btnSelectPdfFiles.Size = new System.Drawing.Size(111, 24);this.btnSelectPdfFiles.TabIndex = 5;this.btnSelectPdfFiles.Text = "选择PDF文件";this.btnSelectPdfFiles.UseVisualStyleBackColor = true;this.btnSelectPdfFiles.Click += new System.EventHandler(this.btnSelectPdfFiles_Click);// // lstPdfFiles// this.lstPdfFiles.FormattingEnabled = true;this.lstPdfFiles.HorizontalScrollbar = true;this.lstPdfFiles.ItemHeight = 12;this.lstPdfFiles.Location = new System.Drawing.Point(5, 34);this.lstPdfFiles.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);this.lstPdfFiles.Name = "lstPdfFiles";this.lstPdfFiles.Size = new System.Drawing.Size(388, 136);this.lstPdfFiles.TabIndex = 6;// // btnConvertPdfToJpg// this.btnConvertPdfToJpg.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));this.btnConvertPdfToJpg.Location = new System.Drawing.Point(5, 210);this.btnConvertPdfToJpg.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);this.btnConvertPdfToJpg.Name = "btnConvertPdfToJpg";this.btnConvertPdfToJpg.Size = new System.Drawing.Size(111, 24);this.btnConvertPdfToJpg.TabIndex = 7;this.btnConvertPdfToJpg.Text = "转换为JPG";this.btnConvertPdfToJpg.UseVisualStyleBackColor = true;this.btnConvertPdfToJpg.Click += new System.EventHandler(this.btnConvertPdfToJpg_Click);// // lblPdfStatus// this.lblPdfStatus.AutoSize = true;this.lblPdfStatus.Location = new System.Drawing.Point(122, 218);this.lblPdfStatus.Name = "lblPdfStatus";this.lblPdfStatus.Size = new System.Drawing.Size(0, 12);this.lblPdfStatus.TabIndex = 8;// // btnClearPdf// this.btnClearPdf.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));this.btnClearPdf.Location = new System.Drawing.Point(281, 210);this.btnClearPdf.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);this.btnClearPdf.Name = "btnClearPdf";this.btnClearPdf.Size = new System.Drawing.Size(111, 24);this.btnClearPdf.TabIndex = 9;this.btnClearPdf.Text = "清除列表";this.btnClearPdf.UseVisualStyleBackColor = true;this.btnClearPdf.Click += new System.EventHandler(this.btnClearPdf_Click);// // tabControl1// this.tabControl1.Controls.Add(this.tabPageJpgToPdf);this.tabControl1.Controls.Add(this.tabPagePdfToJpg);this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill;this.tabControl1.Location = new System.Drawing.Point(0, 0);this.tabControl1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);this.tabControl1.Name = "tabControl1";this.tabControl1.SelectedIndex = 0;this.tabControl1.Size = new System.Drawing.Size(422, 277);this.tabControl1.TabIndex = 10;// // tabPageJpgToPdf// this.tabPageJpgToPdf.Controls.Add(this.btnSelectJpgFiles);this.tabPageJpgToPdf.Controls.Add(this.btnClearJpg);this.tabPageJpgToPdf.Controls.Add(this.lstJpgFiles);this.tabPageJpgToPdf.Controls.Add(this.lblJpgStatus);this.tabPageJpgToPdf.Controls.Add(this.btnConvertJpgToPdf);this.tabPageJpgToPdf.Location = new System.Drawing.Point(4, 22);this.tabPageJpgToPdf.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);this.tabPageJpgToPdf.Name = "tabPageJpgToPdf";this.tabPageJpgToPdf.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2);this.tabPageJpgToPdf.Size = new System.Drawing.Size(414, 251);this.tabPageJpgToPdf.TabIndex = 0;this.tabPageJpgToPdf.Text = "JPG转PDF";this.tabPageJpgToPdf.UseVisualStyleBackColor = true;// // tabPagePdfToJpg// this.tabPagePdfToJpg.Controls.Add(this.label1);this.tabPagePdfToJpg.Controls.Add(this.nudDpi);this.tabPagePdfToJpg.Controls.Add(this.btnSelectPdfFiles);this.tabPagePdfToJpg.Controls.Add(this.lstPdfFiles);this.tabPagePdfToJpg.Controls.Add(this.btnConvertPdfToJpg);this.tabPagePdfToJpg.Controls.Add(this.btnClearPdf);this.tabPagePdfToJpg.Controls.Add(this.lblPdfStatus);this.tabPagePdfToJpg.Location = new System.Drawing.Point(4, 22);this.tabPagePdfToJpg.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);this.tabPagePdfToJpg.Name = "tabPagePdfToJpg";this.tabPagePdfToJpg.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2);this.tabPagePdfToJpg.Size = new System.Drawing.Size(402, 241);this.tabPagePdfToJpg.TabIndex = 1;this.tabPagePdfToJpg.Text = "PDF转JPG";this.tabPagePdfToJpg.UseVisualStyleBackColor = true;// // label1// this.label1.AutoSize = true;this.label1.Location = new System.Drawing.Point(213, 180);this.label1.Name = "label1";this.label1.Size = new System.Drawing.Size(101, 12);this.label1.TabIndex = 11;this.label1.Text = "输出图片DPI设置:";// // nudDpi// this.nudDpi.Location = new System.Drawing.Point(318, 176);this.nudDpi.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);this.nudDpi.Maximum = new decimal(new int[] {600,0,0,0});this.nudDpi.Minimum = new decimal(new int[] {72,0,0,0});this.nudDpi.Name = "nudDpi";this.nudDpi.Size = new System.Drawing.Size(74, 21);this.nudDpi.TabIndex = 10;this.nudDpi.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;this.nudDpi.Value = new decimal(new int[] {300,0,0,0});// // MainForm// this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;this.ClientSize = new System.Drawing.Size(422, 277);this.Controls.Add(this.tabControl1);this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;this.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);this.MaximizeBox = false;this.MinimizeBox = false;this.Name = "MainForm";this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;this.Text = "JPG/PDF转换器 作者: 山水(qq443440204)";this.tabControl1.ResumeLayout(false);this.tabPageJpgToPdf.ResumeLayout(false);this.tabPageJpgToPdf.PerformLayout();this.tabPagePdfToJpg.ResumeLayout(false);this.tabPagePdfToJpg.PerformLayout();((System.ComponentModel.ISupportInitialize)(this.nudDpi)).EndInit();this.ResumeLayout(false);}#endregionprivate System.Windows.Forms.Button btnSelectJpgFiles;private System.Windows.Forms.ListBox lstJpgFiles;private System.Windows.Forms.Button btnConvertJpgToPdf;private System.Windows.Forms.Label lblJpgStatus;private System.Windows.Forms.Button btnClearJpg;private System.Windows.Forms.Button btnSelectPdfFiles;private System.Windows.Forms.ListBox lstPdfFiles;private System.Windows.Forms.Button btnConvertPdfToJpg;private System.Windows.Forms.Label lblPdfStatus;private System.Windows.Forms.Button btnClearPdf;private System.Windows.Forms.TabControl tabControl1;private System.Windows.Forms.TabPage tabPageJpgToPdf;private System.Windows.Forms.TabPage tabPagePdfToJpg;private System.Windows.Forms.NumericUpDown nudDpi;private System.Windows.Forms.Label label1;}
}
MainForm.cs
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using PdfSharp.Drawing;
using PdfSharp.Pdf;
using static System.Net.Mime.MediaTypeNames;
using Image = System.Drawing.Image;namespace JpgToPdfConverter
{public partial class MainForm : Form{// 存储选择的文件路径private List<string> selectedJpgFiles = new List<string>();private List<string> selectedPdfFiles = new List<string>();public MainForm(){InitializeComponent();}#region JPG转PDF功能// 选择JPG文件按钮点击事件private void btnSelectJpgFiles_Click(object sender, EventArgs e){using (OpenFileDialog openFileDialog = new OpenFileDialog()){openFileDialog.Filter = "JPG文件 (*.jpg;*.jpeg)|*.jpg;*.jpeg|所有文件 (*.*)|*.*";openFileDialog.Multiselect = true;openFileDialog.Title = "选择JPG文件";if (openFileDialog.ShowDialog() == DialogResult.OK){selectedJpgFiles.AddRange(openFileDialog.FileNames);UpdateJpgFileList();}}}// 更新JPG文件列表显示private void UpdateJpgFileList(){lstJpgFiles.Items.Clear();foreach (string file in selectedJpgFiles){lstJpgFiles.Items.Add(Path.GetFileName(file));}UpdateJpgStatus($"已选择 {selectedJpgFiles.Count} 个文件");}// 更新JPG转换状态private void UpdateJpgStatus(string message){lblJpgStatus.Text = message;}// 清除JPG文件列表private void btnClearJpg_Click(object sender, EventArgs e){selectedJpgFiles.Clear();UpdateJpgFileList();}// JPG转PDF按钮点击事件private void btnConvertJpgToPdf_Click(object sender, EventArgs e){if (selectedJpgFiles.Count == 0){MessageBox.Show("请先选择JPG文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);return;}using (SaveFileDialog saveFileDialog = new SaveFileDialog()){saveFileDialog.Filter = "PDF文件 (*.pdf)|*.pdf|所有文件 (*.*)|*.*";saveFileDialog.Title = "保存PDF文件";saveFileDialog.FileName = "转换结果.pdf";if (saveFileDialog.ShowDialog() == DialogResult.OK){try{UpdateJpgStatus("正在转换...");Cursor = Cursors.WaitCursor;ConvertJpgToPdf(selectedJpgFiles, saveFileDialog.FileName);UpdateJpgStatus("转换完成!");MessageBox.Show($"PDF文件已保存至:{saveFileDialog.FileName}", "成功", MessageBoxButtons.OK, MessageBoxIcon.Information);}catch (Exception ex){UpdateJpgStatus("转换失败!");MessageBox.Show($"转换过程中发生错误:{ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);}finally{Cursor = Cursors.Default;}}}}// JPG转PDF核心方法//private void ConvertJpgToPdf(List<string> jpgFiles, string pdfPath)//{// using (PdfDocument pdf = new PdfDocument())// {// foreach (string jpgFile in jpgFiles)// {// try// {// // 获取图像尺寸// using (Image image = Image.FromFile(jpgFile))// {// PdfPage page = pdf.AddPage();// page.Width = image.Width;// page.Height = image.Height;// }// // 从文件加载图像到PDF// PdfPage pdfPage = pdf.Pages[pdf.Pages.Count - 1];// XGraphics gfx = XGraphics.FromPdfPage(pdfPage);// XImage xImage = XImage.FromFile(jpgFile);// gfx.DrawImage(xImage, 0, 0);// }// catch (Exception ex)// {// MessageBox.Show($"处理文件 {Path.GetFileName(jpgFile)} 时出错:{ex.Message}", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);// }// }// pdf.Save(pdfPath);// }//}#endregionprivate void ConvertJpgToPdf(List<string> jpgFiles, string pdfPath){using (PdfDocument pdf = new PdfDocument()){foreach (string jpgFile in jpgFiles){using (Image image = Image.FromFile(jpgFile)){PdfPage page = pdf.AddPage();// 直接按像素数设置页面尺寸(1点=1像素)page.Width = image.Width;page.Height = image.Height;XGraphics gfx = XGraphics.FromPdfPage(page);XImage xImage = XImage.FromFile(jpgFile);gfx.DrawImage(xImage, 0, 0, page.Width, page.Height);}}pdf.Save(pdfPath);}}#region PDF转JPG功能// 选择PDF文件按钮点击事件private void btnSelectPdfFiles_Click(object sender, EventArgs e){using (OpenFileDialog openFileDialog = new OpenFileDialog()){openFileDialog.Filter = "PDF文件 (*.pdf)|*.pdf|所有文件 (*.*)|*.*";openFileDialog.Multiselect = true;openFileDialog.Title = "选择PDF文件";if (openFileDialog.ShowDialog() == DialogResult.OK){selectedPdfFiles.AddRange(openFileDialog.FileNames);UpdatePdfFileList();}}}// 更新PDF文件列表显示private void UpdatePdfFileList(){lstPdfFiles.Items.Clear();foreach (string file in selectedPdfFiles){lstPdfFiles.Items.Add(Path.GetFileName(file));}UpdatePdfStatus($"已选择 {selectedPdfFiles.Count} 个文件");}// 更新PDF转换状态private void UpdatePdfStatus(string message){lblPdfStatus.Text = message;}// 清除PDF文件列表private void btnClearPdf_Click(object sender, EventArgs e){selectedPdfFiles.Clear();UpdatePdfFileList();}// PDF转JPG按钮点击事件private void btnConvertPdfToJpg_Click(object sender, EventArgs e){if (selectedPdfFiles.Count == 0){MessageBox.Show("请先选择PDF文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);return;}using (FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog()){folderBrowserDialog.Description = "选择保存JPG文件的文件夹";if (folderBrowserDialog.ShowDialog() == DialogResult.OK){try{UpdatePdfStatus("正在转换...");Cursor = Cursors.WaitCursor;int dpi = (int)nudDpi.Value;ConvertPdfToJpg(selectedPdfFiles, folderBrowserDialog.SelectedPath, dpi);UpdatePdfStatus("转换完成!");MessageBox.Show($"JPG文件已保存至:{folderBrowserDialog.SelectedPath}", "成功", MessageBoxButtons.OK, MessageBoxIcon.Information);}catch (Exception ex){UpdatePdfStatus("转换失败!");MessageBox.Show($"转换过程中发生错误:{ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);}finally{Cursor = Cursors.Default;}}}}// PDF转JPG核心方法private void ConvertPdfToJpg(List<string> pdfFiles, string outputFolder, int dpi){foreach (string pdfFile in pdfFiles){try{string fileNameWithoutExt = Path.GetFileNameWithoutExtension(pdfFile);string fileOutputFolder = Path.Combine(outputFolder, fileNameWithoutExt);// 为每个PDF创建单独的文件夹Directory.CreateDirectory(fileOutputFolder);using (PdfiumViewer.PdfDocument document = PdfiumViewer.PdfDocument.Load(pdfFile)){int pageCount = document.PageCount;for (int i = 0; i < pageCount; i++){string outputPath = Path.Combine(fileOutputFolder, $"{fileNameWithoutExt}_第{i + 1}页.jpg");using (Bitmap image = (Bitmap)document.Render(i, dpi, dpi, false)){image.Save(outputPath, System.Drawing.Imaging.ImageFormat.Jpeg);}}}}catch (Exception ex){MessageBox.Show($"处理文件 {Path.GetFileName(pdfFile)} 时出错:{ex.Message}", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);return;}}}#endregion}
}
Program.cs
using System;
using System.Windows.Forms;namespace JpgToPdfConverter
{static class Program{[STAThread]static void Main(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(new MainForm());}}
}
相关文章:
JPG与PDF格式转换器
该插件可实现JPG与PDF格式的互转。 MainForm.Designer.cs using System.Windows.Forms; namespace JpgToPdfConverter {partial class MainForm{private System.ComponentModel.IContainer components null;protected override void Dispose(bool disposing){if (disposing &…...
Kafka 如何保证消息顺序性
文章目录 分区策略轮询随机按 Partition 路由按 key 路由 顺序性保证 分区策略 Kafka 的消息会被生产者发送到分区 Partition中,然后消费者通过获取分区中的消息来完成消费操作。所以Kafka不仅有主题 Topic这个概念,也引入分区 Partition 这个概念来实现…...
C++23 views::zip 和 views::zip_transform (P2321R2) 深入解析
文章目录 一、引言二、C23与Ranges库背景知识2.1 C23概述2.2 Ranges库回顾 三、views::zip 详解3.1 功能与定义3.2 使用场景3.3 示例代码 四、views::zip_transform 详解4.1 功能与定义4.2 使用场景4.3 示例代码 五、views::zip 与 views::zip_transform 的对比5.1 功能差异5.2…...
Starrocks的主键表涉及到的MOR Delete+Insert更新策略
背景 写这个文章的作用主要是做一些总结和梳理,特别是正对大数据场景下的实时写入更新策略 COW 和 MOR 以及 DeleteInsert 的技术策略的演进, 这也适用于其他大数据的计算存储系统。该文章主要参考了Primary Key table. 分析总结 Starrocks 的主键表主…...
【计算机视觉】OpenCV实战项目:基于OpenCV的车牌识别系统深度解析
基于OpenCV的车牌识别系统深度解析 1. 项目概述2. 技术原理与算法设计2.1 图像预处理1) 自适应光照补偿2) 边缘增强 2.2 车牌定位1) 颜色空间筛选2) 形态学操作3) 轮廓分析 2.3 字符分割1) 投影分析2) 连通域筛选 2.4 字符识别 3. 实战部署指南3.1 环境配置3.2 项目代码解析 4.…...
20250513_问题:由于全局Pytorch导致的错误
文章目录 前言问题:由于全局Pytorch导致的错误找到问题(1)找到问题(2) 总结 前言 问题:由于全局Pytorch导致的错误 代码报错显示无法使用CUDA AttributeError: module ‘torch._C’ has no attribute ‘_cuda_setDevice’ 找到问题(1) import torch pri…...
flinksql实践(从kafka读数据)
本案例是基于flinksql实现的,将逐步实现从kafka读写数据,聚合查询,关联维表(外部系统)等。 环境准备 首先确保电脑已经安装好zookeeper、kafka、flink。本文flink使用单机模式,zookeeper和kafka也使用单机配置。(环境配置部分可以…...
Linux系统:文件系统前言,详解CHSLBA地址
本节重点 理解硬盘的组成结构与工作原理理解柱面、扇区CHS地址进行寻址对整块硬盘的逻辑抽象LBA地址进行寻址LBA与CHS地址的相互转换 一、初识硬盘 1.1 基本概念 硬盘(Hard Disk Drive,HDD)是一种用于存储和检索数据的计算机硬件设备。它…...
2025年01月10日浙江鑫越系统科技前端面试
目录 vue2 和 vue3 的区别vue 怎么封装组件js 怎么把一个数组置空怎么组件自己调用自己的组件v-bind:attribute 和 v-bind“{attribute}” 的区别var let const 的区别this 指向作用域链闭包原型链事件循环 1. vue2 和 vue3 的区别 Vue 2 和 Vue 3 在多个方面存在区别&#…...
2025.05.11阿里云机考真题算法岗-第三题
📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 03. 镜像追踪游戏 问题描述 A先生正在玩一款名为「镜像追踪」的游戏。游戏在一个 n n n...
实景三维建模软件应用场景(众趣科技实景三维建模)
实景三维建模软件应用场景概述 实景三维建模软件,作为数字化时代的重要工具,不仅能够真实、立体、时序化地反映和表达物理世界,还为国家的基础设施建设和数字化发展提供了有力的支撑。 在测绘与地理信息领域,实景三维建模软件是构…...
centos中libc.so.6No such file的解决方式
你在运行安装程序时遇到了以下错误: Configuring the installer for this systems environment...strings: /lib/libc.so.6: No such file 这个错误通常是由于系统中缺少 glibc(GNU C Library)或其相关文件导致的。glibc 是 Linux 系统中的…...
MapReduce打包运行
1. 编写 MapReduce 程序 首先需要编写 MapReduce 程序,通常包含 Mapper、Reducer 和 Driver 类。例如,一个简单的 WordCount 程序: java import java.io.IOException; import java.util.StringTokenizer;import org.apache.hadoop.conf.Con…...
RustDesk:开源电脑远程控制软件
RustDesk:开源电脑远程控制软件 RustDesk:开源电脑远程控制软件一、RustDesk 简介二、下载教程2.1 桌面版下载2.2 Android 版下载 三、安装教程3.1 桌面版安装 四、功能讲解4.1 远程控制4.2 文件传输4.3 安全可靠4.4 自定义服务器 五、RustDesk技术架构解…...
【Unity】WebGL开发问题汇总
1 前言 主要记录下WebGL开发过程中遇到的各种问题。 2 问题 2.1 中文字体不显示 问题: 经典问题了。将项目打包在WebGL平台后,运行发现所用中文字体都不现实了。 解决办法: 替换Text组件的“字体”。可以将电脑字体复制到项目当中然后替换组…...
华为海思系列----昇腾张量编译器(ATC)模型转换工具----入门级使用指南(LINUX版)
由于官方SDK比较冗余且经常跨文档讲解且SDK整理的乱七八糟,对于新手来说全部看完上手成本较高,本文旨在以简短的方式介绍 CAFFE / ONNX 模型转 om 模型,并进行推理的全流程。希望能够帮助到第一次接触华为海思框架的道友们。大佬们就没必要看这种基础文章啦! 注:本…...
c++STL-list的模拟实现
cSTL-list的模拟实现 list源码剖析list模拟实现list构造函数拷贝构造函数赋值重载迭代器 iterator访问结点数size和判空尾插 push_back头插 push_front尾删pop_back头删pop_front插入 insert删除 erase清空clear和析构函数访问结点 参考程序 list源码剖析 建议先看cSTL-list的…...
RabbitMQ 核心概念与消息模型深度解析(二)
四、代码实战 了解了 RabbitMQ 的核心概念和消息模型后,接下来我们通过代码实战来进一步加深对它们的理解和掌握。下面将以 Java 和 Spring AMQP 为例,展示如何使用 RabbitMQ 进行消息的发送和接收。 4.1 环境准备 在开始编写代码之前,需要…...
JAVA研发+前后端分离,ZKmall开源商城B2C商城如何保障系统性能?
在电商行业竞争白热化的当下,B2C 商城系统的性能表现成为决定用户留存与商业成败的关键因素。ZKmall 开源商城凭借 Java 研发与前后端分离架构的深度融合,构建起一套高效、稳定且具备强大扩展性的系统架构,从底层技术到上层应用全方位保障性能…...
【android bluetooth 框架分析 02】【Module详解 6】【StorageModule 模块介绍】
1. 背景 我们在 gd_shim_module 介绍章节中,看到 我们将 StorageModule 模块加入到了 modules 中。 // system/main/shim/stack.cc modules.add<storage::StorageModule>();在 ModuleRegistry::Start 函数中我们对 加入的所有 module 挨个初始化。 而在该函…...
Datawhale 5月llm-universe 第1次笔记
课程地址:GitHub - datawhalechina/llm-universe: 本项目是一个面向小白开发者的大模型应用开发教程,在线阅读地址:https://datawhalechina.github.io/llm-universe/ 难点:配置conda环境变量 我用的vscode github方法 目录 重要…...
Linux架构篇、第五章git2.49.0部署与使用
Linux_架构篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:git2.49.0部署与使用 版本号: 1.0,0 作者: 老王要学习 日期: 2025.05.13 适用环境: Centos7 文档说明 这份文档聚焦于在 CentOS 7 环境下部署和…...
南方科技大学Science! 自由基不对称催化新突破 | 乐研试剂
近日,南方科技大学刘心元教授团队联合浙江大学洪鑫教授团队在自由基不对称催化领域取得新进展。课题组开发了一系列大位阻阴离子 N,N,P-配体,用于铜催化未活化外消旋仲烷基碘与亚砜亚胺的不对称胺化反应。该反应表现出广泛的底物兼容性,涵盖具…...
手机换IP真的有用吗?可以干什么?
在当今数字化时代,网络安全和个人隐私保护日益受到重视。手机作为我们日常生活中不可或缺的工具,其网络活动痕迹往往通过IP地址被记录和追踪。那么,手机换IP真的有用吗?它能为我们带来哪些实际好处?本文将为你一一解答…...
【C++详解】类和对象(上)类的定义、实例化、this指针
文章目录 一、类的定义1、类定义格式2、访问限定符3、类域 二、实例化1、实例化概念2、对象大小 三、this指针 一、类的定义 1、类定义格式 class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中…...
C语言—再学习(数据的存储类别)
在c语言中,每个变量和函数都有两个属性:数据类型和数据的存储类别 C的存储类别包括4种:自动挡(auto)、静态的(static)、寄存器的(register)、外部的(extern&…...
软考软件评测师——计算机组成与体系结构(分级存储架构)
一、虚拟存储技术 虚拟存储系统通过软硬件协同实现内存扩展,其核心特征包括: 逻辑容量扩展能力:实际物理内存与外存结合,呈现远大于物理内存的连续地址空间动态加载机制:程序运行时仅加载必要部分到内存,…...
需求跟踪矩阵准确性的5大策略
需求跟踪矩阵的准确性可显著提升软件项目质量,确保需求的全面覆盖、减少遗漏和偏差,有利于优化变更管理,降低返工风险,最终保障产品符合用户预期和业务目标。如果不能保证跟踪矩阵的准确性,可能会导致需求遗漏、测试覆…...
【调度算法】MAPF多智能体路径规划问题
参考链接:https://blog.csdn.net/qq_43353179/article/details/129396325 在这篇博客的基础上对一些省略的部分进行补充。 网站:https://mapf.info/ 可行性判断 1. k-鲁棒性(k-robust MAPF) 在经典 MAPF 中,只要所有…...
迅龙3号基于兆讯MH22D3适配CST328多点触摸驱动开发笔记
MH22D3芯片是兆讯公司新推出的基于cortex-M3内核的新一代芯片,专注于显示应用,其主频高达216Mhz,64KB SRAM,512KB Flash,开发UI应用游刃有余。详细介绍请看:MH22D3新一代显控应用性价比之王 新龙微基于MH22…...
推荐算法工程化:ZKmall模板商城的B2C 商城的用户分层推荐策略
在 B2C 电商竞争激烈的市场环境中,精准推荐已成为提升用户体验、促进商品销售的关键。ZKmall 模板商城通过推荐算法工程化手段,深度挖掘用户数据价值,制定科学的用户分层推荐策略,实现 “千人千面” 的个性化推荐,帮助…...
你对于JVM底层的理解
JVM(Java虚拟机)是一个执行Java字节码的虚拟机,负责将Java程序的代码转化为能够在不同操作系统上运行的机器码。为了深入理解JVM的底层工作原理,可以从以下几个方面入手: 1. 类加载机制 JVM的类加载机制是其核心之一…...
深入探讨 Java 性能术语与优化实践
在 Java 开发中,性能优化是确保应用程序高效运行的关键。无论是构建实时处理系统还是大规模分布式服务,理解性能术语和分析方法都至关重要。本文将详细介绍 Java 性能中的核心术语,包括延迟(Latency)、吞吐量(Throughput)、利用率(Utilization)、效率(Efficiency)、…...
简单介绍Qt的属性子系统
深入理解Qt的属性系统 笔者最近正在大规模的开发Qt的项目和工程,这里笔者需要指出的是,这个玩意在最常规的Qt开发中是相对比较少用的,笔者也只是在Qt的QPropertyAnimation需要动画感知笔者设置的一个属性的时候方才知道这个东西的。因此&…...
【PmHub后端篇】PmHub中基于自定义注解和AOP的服务接口鉴权与内部认证实现
1 引言 在现代软件开发中,尤其是在微服务架构下,服务接口的鉴权和内部认证是保障系统安全的重要环节。本文将详细介绍PmHub中如何利用自定义注解和AOP(面向切面编程)实现服务接口的鉴权和内部认证,所涉及的技术知识点…...
消息~组件(群聊类型)ConcurrentHashMap发送
为什么选择ConcurrentHashMap? 在开发聊天应用时,我们需要存储和管理大量的聊天消息数据,这些数据会被多个线程频繁访问和修改。比如,当多个用户同时发送消息时,服务端需要同时处理这些消息的存储和查询。如果用普通的…...
掌控随心 - 服务网格的流量管理艺术 (Istio 实例)
掌控随心 - 服务网格的流量管理艺术 (Istio 实例) 想象一下,没有服务网格的时候,我们要实现像“将 1% 的用户流量导入到新版本应用”、“根据用户设备类型访问不同后端”、“模拟下游服务故障”这类高级流量策略,通常需要在代码、负载均衡器、API 网关等多个地方进行复杂且分…...
Github 2025-05-13 Python开源项目日报 Top10
根据Github Trendings的统计,今日(2025-05-13统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目10TypeScript项目1 ComfyUI:强大而模块化的稳定扩散GUI 创建周期:399 天开…...
Spring Boot 自动装配原理详解
Spring Boot 的自动装配(Auto-Configuration)是其核心特性之一,它极大地简化了 Spring 应用的配置过程。通过自动装配,Spring Boot 能够根据项目中的依赖(例如,添加了 Spring Data JPA 依赖后自动配置数据库…...
Python核心数据类型全解析:字符串、列表、元组、字典与集合
导读: Python 是一门功能强大且灵活的编程语言,而其核心数据类型是构建高效程序的基础。本文深入剖析了 Python 的五大核心数据类型——字符串、列表、元组、字典和集合,结合实际应用场景与最佳实践,帮助读者全面掌握这些数据类型…...
索尼(sony)摄像机格式化后mp4的恢复方法
索尼(sony)的Alpha 7 Ⅳ系列绝对称的上是索尼的“全画幅标杆机型”,A7M4配备了3300万像素的CMOS,以及全新研发的全画幅背照式Exmor R™CMOS影像传感器,搭载BIONZ XR™影像处理器,与旗舰微单™Alpha 1如出一辙。下面我们来看看A7M4…...
Kubernetes容器运行时:Containerd vs Docker
Containerd 和 Docker 是容器技术领域的两个核心组件,它们在功能定位、架构设计、性能特点及适用场景上有显著差异。以下是两者的详细对比分析: 一、定位与功能 特性DockerContainerd核心定位完整的容器平台,包含构建、运行、编排等全生命周…...
免费专业级 PDF 处理!SolidPDF OCR 识别 + 精准转换批量处理
各位办公小能手们!今天咱来聊聊一款超牛的软件——SolidConverterPDF。这可是个专业的多功能PDF处理工具,啥格式转换、文档编辑、扫描识别,它都能搞定!下面我就给大伙详细唠唠它的厉害之处。 先说说它的核心功能。 一是PDF格式转换…...
电子电器架构 --- 区域计算架构(Zonal Compute)备战下一代电子电气架构
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...
API的学习总结(上)
在 Java 中,API 指的是 Java 提供的一系列类、接口、方法和工具,用于开发 Java 应用程序。Java API 是 Java 平台的核心组成部分,它提供了丰富的功能,包括基础数据类型、集合框架、输入输出、网络编程、多线程、数据库连接等。 核…...
Spring Boot之Web服务器的启动流程分析
如何判断创建哪种web容器:servlet?reactive? 我们在启动Spring Boot程序的时候,会使用SpringApplication.run方法来启动,在启动流程中首先要判断的就是需要启动什么类型的服务器,是servlet?或者…...
代码随想录算法训练营第六十三天| 图论9—卡码网47. 参加科学大会,94. 城市间货物运输 I
每日被新算法方式轰炸的一天,今天是dijkstra(堆优化版)以及Bellman_ford ,尝试理解中,属于是只能照着代码大概说一下在干嘛。 47. 参加科学大会 https://kamacoder.com/problempage.php?pid1047 dijkstra(…...
RAG之大规模解析 PDF 文档全流程实战
PDF 文档在商业、学术和政府领域无处不在,蕴含着大量宝贵信息。然而,从 PDF 中提取结构化数据却面临着独特的挑战,尤其是在处理数千甚至数百万个文档时。本指南探讨了大规模解析 PDF 的策略和工具。 PDF解析挑战 PDF 的设计初衷是为了提供一致的视觉呈现,而非数据提取。这…...
uart16550详细说明
一、介绍 uart16550 ip core异步串行通信IP连接高性能的微控制器总线AXI,并为异步串行通信提供了 控制接口。软核设计连接了axilite接口。 二、特性 1.axilite接口用于寄存器访问和数据传输 2.16650串口和16450串口的软件和硬件寄存器都是兼容的 3.默认的core配置参数…...
Docker 环境安装(2025最新版)
Docker在主流的操作系统和云平台上都可以使用,包括Linux操作 系统(如Ubuntu、 Debian、Rocky、Redhat等)、MacOS操作系统和 Windows操作系统,以及AWS等云平 台。 Docker官网: https://docs.docker.com/ 配置宿主机网…...