C# PDF下载地址转图片(Base64 编码)

embedded/2025/1/15 20:10:57/

实现思路:

步骤一、根据PDF地址下载pdf文件保存为临时文件,获得pdf文件的byte[]数组

/// 从指定的 URL 下载 PDF 文件public  byte[] DownloadPdf(string url){try{using (WebClient client = new WebClient()){return client.DownloadData(url);}}catch (Exception ex){Console.WriteLine($"下载PDF异常: {ex.Message}");return null;}}

步骤二、初始化pdfDocument类,并加载PDF文档,遍历pdf文件,一页生成一个jpg图片,并保存图片

 string url = infoEntity.ReportUrl; //pdf地址byte[] pdfBytes = DownloadPdf(url);string tempPdfPath = Path.GetTempFileName();File.WriteAllBytes(tempPdfPath, pdfBytes);// 初始化一个PdfDocument类实例,并加载PDF文档
PdfDocument doc = new PdfDocument();
doc.LoadFromFile(tempPdfPath);
// 遍历PDF每一页for (int i = 0; i < doc.Pages.Count; i++){Report_Pic report_Pic = new Report_Pic();// 将PDF页转换成Bitmap图形System.Drawing.Image bmp = doc.SaveAsImage(i);string imgPath = Application.StartupPath;// 将Bitmap图形保存为jpg格式的图片 string pngPath = $"{imgPath}\\img\\{infoEntity.ReportFileName.Replace(".pdf","")}_page_{i}.jpg";if (File.Exists(pngPath)){try{File.Delete(pngPath);}catch (Exception ex){Log.error($"删除图片时出错: {ex.Message}");}}bmp.Save(pngPath, System.Drawing.Imaging.ImageFormat.Jpeg);Log.info("PDF地址:"+tempPdfPath+"    图片地址:" + pngPath);string imageBase64Str= ConvertImageToBase64(bmp); //图片内容[Base64编码]
Log.info("图片Base64编码:"+imageBase64Str);//删除图片
File.Delete(pngPath);
}
// 删除临时文件
File.Delete(tempPdfPath);

步骤三、将每张图片转换成Base64编码

 // 将图片转换为 Base64 编码static string ConvertImageToBase64(Image image){using (MemoryStream ms = new MemoryStream()){image.Save(ms, ImageFormat.Jpeg);byte[] imageBytes = ms.ToArray();return Convert.ToBase64String(imageBytes);}}

备注:

目标框架:.Net Framework 4

引用库

using System.Net;
using System.Drawing;  //版本  4.0.0.0
using System.Drawing.Imaging;
using Spire.Pdf;   //版本8.6.1.0


http://www.ppmy.cn/embedded/154180.html

相关文章

Codeforces Round 976 (Div. 2) and Divide By Zero 9.0(A-E)

链接&#xff1a;Dashboard - Codeforces Round 976 (Div. 2) and Divide By Zero 9.0 - Codeforces A. Find Minimum Operations 思路 可以观察发现这里有个进制的思想&#xff0c;转换为k进制把每位数相加即可 代码 void solve(){int n,k;cin>>n>>k;if(k1){…

CSS语言的语法

CSS语言的语法与应用 CSS&#xff08;层叠样式表&#xff0c;Cascading Style Sheets&#xff09;是一种用于描述网页文档外观的样式表语言。它主要用于网页的设计和布局&#xff0c;与HTML&#xff08;超文本标记语言&#xff09;相辅相成。通过CSS&#xff0c;我们可以控制网…

用AI技术提升Flutter开发效率:ScriptEcho的力量

引言 在当今快速发展的技术时代&#xff0c;Flutter作为一种跨平台开发框架&#xff0c;正在越来越多的开发者中崭露头角。它不仅能够为开发者提供一套代码同时部署到iOS和Android平台的解决方案&#xff0c;还能帮助企业节省人力成本和开发时间。然而&#xff0c;对于新手开发…

计算机网络之---SSL/TLS协议

SSL/TLS协议 **SSL&#xff08;Secure Sockets Layer&#xff09;和TLS&#xff08;Transport Layer Security&#xff09;**是加密协议&#xff0c;用于确保通过不安全的网络&#xff08;如互联网&#xff09;传输的数据的安全性和隐私。它们通过提供数据加密、身份验证和数据…

win32汇编环境,窗口程序中单选框的一般操作示例

;运行效果 ;win32汇编环境,窗口程序中单选框的一般操作示例 ;比如在窗口程序中生成单选框&#xff0c;默认哪项选中&#xff0c;判断当前选中哪一项&#xff0c;让哪项选中&#xff0c;得到选中项的名称等 ;直接抄进RadAsm可编译运行。重点部分加备注。 ;以下是ASM文件 ;>&g…

《拉依达的嵌入式\驱动面试宝典》—操作系统篇(四)

《拉依达的嵌入式\驱动面试宝典》—操作系统篇(四) 你好,我是拉依达。 感谢所有阅读关注我的同学支持,目前博客累计阅读 27w,关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析(持续更新)-CSDN博客》已经是 Linux驱动 相关内容搜索的推荐首位,感谢大家支持。 《拉…

token

token案例&#xff1a; 案例&#xff1a; 网站&#xff1a;http://shop.duoceshi.com/login?redirect%2Fdashboard code接口&#xff1a;http://manage.duoceshi.com/auth/code 登录接口&#xff1a;http://manage.duoceshi.com/auth/login 登录接口参数&#xff1a;{&quo…

如何让 LLM 使用外部函数 or 工具?Llama-3-Groq-8B-Tool-Use 模型使用详解

2024年7月份&#xff0c;Groq 团队在huggingface上发布了基于Meta llama3两个大小&#xff08;8b和70b&#xff09;的开源模型进行微调&#xff08;官网介绍&#xff09;的模型&#xff08;Groq/Llama-3-Groq-8B-Tool-Use 和 Groq/Llama-3-Groq-70B-Tool-Use&#xff09;&#…