最新要闻
- 【播资讯】比亚迪执行副总裁:美国市场不在我们考虑范围内
- 石家庄迈入“刷脸”乘车时代:买一根火腿肠就能免费坐地铁活动结束了_环球动态
- 制作成本16.5亿!《封神三部曲》第一部7月20上映:角色海报公布 太强大 今日报
- 吹牛还是玩真的?丰田下一代电动汽车续航达1500公里
- 【天天报资讯】小米发布米家旅行箱:顶部嵌平设计 行走的小桌板
- 市场监管总局:到2035年 计量数据归集共享规模显著提升-快播
- 【寻味中华丨饮食】蔡甸藕带:白若玲珑玉 丝缕皆故乡
- 【天天时快讯】699元!XREAL Beam投屏盒子发布:随身携带的“可悬停AR空间屏”
- AMD今晚发布新CPU Intel急了:至强性能比EPYC快7倍
- 【世界新视野】4-1战胜热火!掘金队夺队史首个NBA总冠军:网友发帖祝贺 约老师太强
- 小区门口连装8条减速带 物业回复让业主无语:为防业主逃费
- 贵1000元值不值?i7-13700H和i5-13500H对比实测 世界观点
- 我在塞尔维亚寻找约基奇-每日速递
- 全球微速讯:“铁榔头”郎平重返中学校园,为学弟学妹成长“支招”
- 启明星辰(002439)6月12日主力资金净卖出1310.11万元
- 长安欧尚Z6新能源半年降价3万多被集体投诉 车主:坑惨我们了
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
三种方法让.NET轻松实现Excel转PDF
前一段时间有网友问Excel转pdf怎么转pdf,小编帮他实现了一个,方法是使用EPPlus和PdfSharp组件实现,由于依赖OfficeOpenXml他也没有用上,后来小编又实现了二种不依赖OfficeOpenXml的方法。本文将介绍这三种方法实现Excel转pdf。
一、EPPlus和PdfSharp组件实现
(资料图片)
逻辑是先将Excel内容转换为HTML字符串,然后再将HTML字符串转换为PDF文件。转换过程中的格式和样式可能会有一些差异,您可能需要根据需求进行进一步的调整和优化。
使用方法
1、首先使用“NuGet 包管理器”安装EPPlus和PdfSharp
2、在代码页面引用
using IronPdf;using OfficeOpenXml;
3、建两个方法ConvertExcelToPdf和ExcelToHtml
ConvertExcelToPdf方法用于将Excel文件转换为PDF文件,ExcelToHtml这个方法将Excel工作表的内容转换为HTML字符串。代码如下:
public static void ConvertExcelToPdf(string excelFilePath, string pdfFilePath) { // 读取Excel文件 using (ExcelPackage package = new ExcelPackage(new FileInfo(excelFilePath))) { ExcelPackage.LicenseContext = LicenseContext.NonCommercial; ExcelWorksheet worksheet = package.Workbook.Worksheets[0]; // 假设要转换的工作表是第一个工作表 // 创建一个HTML字符串,将Excel内容转换为HTML string htmlContent = ExcelToHtml(worksheet); // 使用IronPDF将HTML字符串转换为PDF var renderer = new HtmlToPdf(); renderer.PrintOptions.MarginTop = 0; renderer.PrintOptions.MarginBottom = 0; renderer.PrintOptions.MarginLeft = 0; renderer.PrintOptions.MarginRight = 0; var pdf = renderer.RenderHtmlAsPdf(htmlContent); // 保存PDF文件 pdf.SaveAs(pdfFilePath); } } public static string ExcelToHtml(ExcelWorksheet worksheet) { var sb = new StringBuilder(); sb.AppendLine(""); var startRow = worksheet.Dimension.Start.Row; var endRow = worksheet.Dimension.End.Row; var startColumn = worksheet.Dimension.Start.Column; var endColumn = worksheet.Dimension.End.Column; for (int row = startRow; row <= endRow; row++) { sb.AppendLine(""); for (int col = startColumn; col <= endColumn; col++) { var cellValue = worksheet.Cells[row, col].Value; sb.AppendLine("" + (cellValue != null ? cellValue.ToString() : "") + " "); } sb.AppendLine(" "); } sb.AppendLine("
"); return sb.ToString(); }//调用方法stringexcelFilePath="C:\\Users\\user\\Desktop\\test.xlsx";stringpdfFilePath="C:\\Users\\user\\Desktop\\test.pdf";exceltopdf.ConvertExcelToPdf(excelFilePath,pdfFilePath);
主要有两个方法:
ConvertExcelToPdf: 这个方法用于将Excel文件转换为PDF文件。它首先使用ExcelPackage类从Excel文件中读取数据。然后,调用ExcelToHtml方法将Excel内容转换为HTML字符串。接下来,使用IronPDF库中的HtmlToPdf类将HTML字符串转换为PDF对象。最后,将PDF对象保存到指定的PDF文件路径中。
ExcelToHtml:这个方法将Excel工作表的内容转换为HTML字符串。它使用StringBuilder来构建HTML字符串。首先,它添加
标签作为表格的开始。然后,通过遍历工作表的行和列,将每个单元格的值添加到HTML字符串中作为一个td元素。最后,添加table标签作为表格的结束,并将构建好的HTML字符串返回。缺点:此方法可能需要依赖office,网友回复反馈;另外需要用html进行格式处理,也是个麻烦事情。
效果:
二、Spire组件实现
逻辑是首先使用Spire.XLS库加载Excel文件,并使用Spire.PDF库创建PDF文档。然后,我们遍历Excel文件的每个工作表,将表格内容逐个绘制到PDF页面上。
使用方法
1、首先使用“NuGet 包管理器”安装Spire。注意的是需要安装Spire,不要安装Spire.XLS和Spire.PDF否则会出现不兼容的问题。
2、在代码页面引用
using Spire.Pdf;using Spire.Pdf.Graphics;using Spire.Xls;
3、只需要建一个方法ConvertExcelToPdf。传入要转换的excel路径和输出的路径,代码如下:
public static void ConvertExcelToPdf(string excelFilePath, string pdfFilePath) { // 加载Excel文件 Workbook workbook = new Workbook();workbook.LoadFromFile(excelFilePath); // 创建PDF文档PdfDocumentpdfDocument=newPdfDocument(); // 添加Excel表格内容到PDF foreach (Worksheet sheet in workbook.Worksheets) {PdfPageBasepdfPage=pdfDocument.Pages.Add();PdfDocumentdocument=newPdfDocument();PdfTrueTypeFontfonts=newPdfTrueTypeFont(@"C:\Windows\Fonts\simfang.ttf",10f); // 获取Excel表格的行数和列数 int rowCount = sheet.LastRow + 1;intcolumnCount=sheet.LastColumn+1; // 将Excel表格内容逐个添加到PDF for (int row = 1; row <= rowCount; row++) { for (int column = 1; column <= columnCount; column++) { string value = sheet.Range[row, column].Text; if (value != null) // 绘制单元格内容到PDF页面 { pdfPage.Canvas.DrawString(value, fonts, PdfBrushes.Black, column * 70, row * 20); } } }} // 保存PDF文件pdfDocument.SaveToFile(pdfFilePath); Console.WriteLine("PDF转换完成。"); }//调用方法跟上面一样
此方法需要注意的是Spire默认不支持中文,需要我们单独引用中文字库,在代码的13行就是引用字库的地方,大家可以把字库拷贝到自己的项目引用。
缺点:默认不支持中文字库,需要单独引用;另外输出格式不带表格(可能可以调);免费版本有水印,这个网上有解决方案,大家可以去某度搜索。
效果如下:
三、NPOI和iTextSharp组件实现
逻辑是通过使用NPOI库读取Excel文件,然后使用iTextSharp库创建PDF文档。
使用方法
1、首先使用“NuGet 包管理器”安装NPOI和iTextSharp。
2、在代码页面引用
usingNPOI.SS.UserModel;usingNPOI.XSSF.UserModel;usingiTextSharp.text;usingiTextSharp.text.pdf;
3、需要建二个方法,ConvertExcelToPdf和GetChineseFont方法,GetChineseFont主要作业是字符格式转换。ConvertExcelToPdf传入要转的excel路径和输出的路径,代码如下:
public static void ConvertExcelToPdf2(string excelFilePath, string pdfFilePath) { Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); // 加载Excel文件 using (FileStream fileStream = new FileStream(excelFilePath, FileMode.Open, FileAccess.Read)) { IWorkbook workbook = new XSSFWorkbook(fileStream); ISheet sheet = workbook.GetSheetAt(0); // 创建PDF文档 Document document = new Document(); // 创建PDF写入器 PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(pdfFilePath, FileMode.Create)); // 打开PDF文档 document.Open(); // 添加Excel表格内容到PDF PdfPTable table = new PdfPTable(sheet.GetRow(0).LastCellNum); table.WidthPercentage = 100; foreach (IRow row in sheet) { foreach (ICell cell in row) { string value = cell.ToString(); PdfPCell pdfCell = new PdfPCell(new Phrase(value, GetChineseFont())); table.AddCell(pdfCell); } } document.Add(table); // 关闭PDF文档 document.Close(); } Console.WriteLine("PDF转换完成。"); } static Font GetChineseFont() { var baseFont = BaseFont.CreateFont(@"C:\Windows\Fonts\simfang.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);returnnewFont(baseFont,12); }//调用方法跟方法一一样//欢迎关注公众号:DOTNET开发跳槽,领取海量面试题。加微信号xbhpnet入群交流
此方法跟Spire一样默认不支持中文,需要我们单独引用中文字库,方法GetChineseFont就是处理引用中文字库。另外需要需要在 NuGet 里添加 System.Text.Encoding.CodePages并注册,否则会报错,注册如下。
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
缺点:此方法也比较坑,不支持中文,还需要引用额外的字库支持组件CodePages。
效果如下:
结语
本文介绍了.NET三种方法实现Excel转pdf,他们各有优点,第一种可以自定义样式,第二种依赖独立组件,第三种显示效果更佳,从使用效果来看小编推荐第三种。其实还有很多组件实现Excel转pdf,比如Aspose.Cells,有的需要授权收取费用、大家自己可以研究一下。本项目是基于.NET7在windows下测试运行,在linux下没有实验过,大家可以尝试一下。大家还有什么好的方式实现Excel转pdf呢?欢迎留言讨论。
来源公众号:DotNet开发跳槽
关键词:
三种方法让.NET轻松实现Excel转PDF
天天快看点丨docker-compose搭建wordpress
【播资讯】比亚迪执行副总裁:美国市场不在我们考虑范围内
石家庄迈入“刷脸”乘车时代:买一根火腿肠就能免费坐地铁活动结束了_环球动态
制作成本16.5亿!《封神三部曲》第一部7月20上映:角色海报公布 太强大 今日报
吹牛还是玩真的?丰田下一代电动汽车续航达1500公里
【天天报资讯】小米发布米家旅行箱:顶部嵌平设计 行走的小桌板
市场监管总局:到2035年 计量数据归集共享规模显著提升-快播
【技术积累】软件设计模式中的工厂模式【一】-独家
STM32F429 Discovery开发板应用:使用FreeRTOS队列+DMA双缓存实现串口数据接收
【寻味中华丨饮食】蔡甸藕带:白若玲珑玉 丝缕皆故乡
【天天时快讯】699元!XREAL Beam投屏盒子发布:随身携带的“可悬停AR空间屏”
AMD今晚发布新CPU Intel急了:至强性能比EPYC快7倍
【世界新视野】4-1战胜热火!掘金队夺队史首个NBA总冠军:网友发帖祝贺 约老师太强
小区门口连装8条减速带 物业回复让业主无语:为防业主逃费
贵1000元值不值?i7-13700H和i5-13500H对比实测 世界观点
我在塞尔维亚寻找约基奇-每日速递
全球微速讯:“铁榔头”郎平重返中学校园,为学弟学妹成长“支招”
世界最新:深度学习应用篇-推荐系统[11]:推荐系统的组成、场景转化指标(pv点击率,uv点击率,曝光点击率)、用户数据指标等评价指标详解
flutter 日志打印三種方法
最新:Linux根文件制作
热推荐:一对一直播源码平台搭建的关键条件,成败在此。
真刑!几行代码端了整个教务系统。。
启明星辰(002439)6月12日主力资金净卖出1310.11万元
长安欧尚Z6新能源半年降价3万多被集体投诉 车主:坑惨我们了
每日热讯!2折!115网盘618大促:10年VIP只要1000元 赠100TB空间
全脂/低脂可选:特仑苏纯牛奶2.7元/盒抄底(商超6元)
腾势N7赛道远超宝马X3 赵长江:意向客户看到展车后几乎全下单了
Fold5、Flip5换壳!三星W24系列折叠屏手机通过认证:25W快充
吴尚垠 吴尚_每日消息
JAVA非递归生成无限级菜单树的较简代码实现。(非泛用型工具包,仅总结逻辑)
每日关注!低代码开发平台为数智赋能,让开发变得更简单
奶我一口是什么意思网络用语_奶你一口是什么意思简介介绍
腾讯祭出的大招《无畏契约》 能不能成为下一个《英雄联盟》?-环球微速讯
环球观点:最大内存+最美拍照手机!小米Civi 3 1TB上市:2999元
当前消息!满级玩家有盼头了 暗黑世界V等你来
28.98万起 智己LS7都市版上市 CEO刘涛:现在买增程过几年就会焦虑 每日热点
男子洗澡被闯入的两匹“狼”吓坏 经辨认是阿拉斯加 焦点精选
C天键(301383)6月12日主力资金净买入2791.69万元 焦点快看
【当前独家】hvv面试常见框架漏洞
天天热头条丨ldquo 以至 rdquo ldquo 以致 rdquo ldquo 以至于 rdquo 与 ldquo 以致于 rdquo 的区别
蔚来降价3万!李斌:买的起2、30万车的人时间成本很高 时薪200元肯定是有的-世界播报
世界即时:仇恨拉满!日本核污水排放在即 韩国人正疯狂买盐:不敢吃海鲜了
三冠王巡游!曼城全队展示三座奖杯 哈兰德赤膊上阵 城迷疯狂庆祝
每日快报!暂停加息预期支撑多头 美债市场周初表现偏强
微资讯!英伟达市占率超83% 显卡降不降价我说了算!4060系列买到偷着乐?
希捷被重罚3亿美元后!消息称华为不缺硬盘、SSD了:西数持续供货中_每日资讯
十多年了 苹果新款Mac Pro依然不是中国制造:美泰联手组装
芬兰加入北约的军事协调工作结束 双方签署声明 速读
每日速读!读发布!设计与部署稳定的分布式系统(第2版)笔记01_生产环境的生存法则
大家超爱看黑美鱼?《小美人鱼》卖座成2023票房TOP10:国内外口碑两极分化
焦点简讯:漫威等大片国人不爱看了 不符合审美!郭帆:中国电影将弯道超车好莱坞
环球微速讯:香干怎么做比较好吃?
靠给肯德基、麦当劳供货的纸袋大王上市:创始人身价近12亿
一个月3家公司退出:日本手机产业无奈 打不过苹果也打不过小米-世界新消息
天天新动态:618降价英雄:大屏电视跌破2000元该如何买?
绝不降价的蔚来全系降3万!李斌被逼得没辙了
夸克App半夜突然上热搜 网友懵了:没广告很好用
全球报道:鲁葱杂5号_关于鲁葱杂5号简述
开远市气象台发布暴雨蓝色预警信号【Ⅳ级/一般】【2023-06-12】|每日速读
微控制器实时操作系统实践4选择正确的MCU 每日报道
全球短讯!.NET 5 以后的 HttpClient 超时问题
Web安全-渗透测试-信息收集02|环球通讯
还买什么杂牌 小米27寸2K 165Hz显示器到手1159元
贵州“美猴王”打坐冥想神情悠闲 网友:猴子竟也懂养生
全球第三大手机系统鸿蒙4.0来了!华为HDC 2023定档:8月4日见 关注
国际原子能机构总干事已出发前往乌克兰 计划与泽连斯基会面|全球快播
如何解决系统报错:nf_conntrack: table full, dropping packets|天天关注
内存马简单了解(新手向)
头条焦点:小米9号员工李明创业:全球首款Android桌面机器人来了
全年无休的数字人 卷走主播
徕卡超大杯首次进军海外!小米13 Ultra登陆欧洲:售价1499欧超iPhone
讯息:中国最强AI研究院的大模型 为何迟到了
海南女网友感冒 福建小伙骑电摩上高速送药:地图显示要骑77小时|今日热闻
广东惠州可提供联创电压力锅维修服务地址在哪
vulhub靶场搭建,以及使用方法
当前关注:148家企业获评守信示范企业 为历年最多
速读:又一时速350高铁开通在即:贵阳至南宁从5个多小时缩短至2小时
当前焦点!德国人拒绝Intel
高性能还有好身材的RTX轻薄本!华硕灵耀Pro14 2023 13499元起
梅西首次快手直播被吐槽“诈骗”:仅出镜1分钟 还是录播
透气不闷热 骆驼速干运动套装79元(门店778元)_当前速读
速递!文心一言 VS 讯飞星火 VS chatgpt (39)-- 算法导论5.4 3题
ArrayList 底层结构和源码分析 世界观天下
全球最大的红宝石拍卖价格高达2.48亿 创下有史以来最高纪录
保时捷发布其纯电概念hypercar 马力或将达到惊人的1500匹
伏罂而听的故事声音主要是借助于什么传入侦察兵的耳朵_伏罂而听的成语故事
福特回应称没有计划终止福特电马赫公司运营 或有意将“回归”中国运营
复兴号开进青藏铁路进入倒计时 有望7月1日运营
日本正式决定启动福岛核废水排海计划 韩国民众担心吃盐问题
员工因“饭量太大”被解雇要求赔偿 法院:驳回
【环球热闻】微信朋友圈转发扫码免费送米家风扇?小米辟谣:假的
比凯美瑞还便宜!特斯拉Model 3美国售价将低于20万 天天快看
报道:中国2023年汽车销量破1000万辆 出口量暴增 老外爱上国产车
前所未见:Win11神秘版本惊现Win10隐藏壁纸
“前端已死”甚嚣尘上,全栈工程师卷到起飞
磁盘分区
尚医通-day02【医院设置前端详细步骤】(内附源码)|环球快播报
全球热点评!记录--详解 XSS(跨站脚本攻击)
ESMap 三维地图在智慧园区三维场景的应用-数字孪生3D可视化服务平台 当前速递