.NET轻松实现Excel转PDF的三种方法详解

 更新时间:2025年01月24日 09:50:48   作者:翔星  
这篇文章主要为大家详细介绍了.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("<table>");
            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("<tr>");

                for (int col = startColumn; col <= endColumn; col++)
                {
                    var cellValue = worksheet.Cells[row, col].Value;
                    sb.AppendLine("<td>" + (cellValue != null ? cellValue.ToString() : "") + "</td>");
                }

                sb.AppendLine("</tr>");
            }
            sb.AppendLine("</table>");
            return sb.ToString();
        }

  //调用方法
string excelFilePath = "C:\\Users\\user\\Desktop\\test.xlsx";
string pdfFilePath = "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文档
            PdfDocument pdfDocument = new PdfDocument();
            // 添加Excel表格内容到PDF
            foreach (Worksheet sheet in workbook.Worksheets)
            {
                PdfPageBase pdfPage = pdfDocument.Pages.Add();
                PdfDocument document = new PdfDocument();
                PdfTrueTypeFont fonts = new PdfTrueTypeFont(@"C:\Windows\Fonts\simfang.ttf", 10f);
                // 获取Excel表格的行数和列数
                int rowCount = sheet.LastRow + 1;
                int columnCount = 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、在代码页面引用

using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using iTextSharp.text;
using iTextSharp.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);
            return new Font(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下没有实验过,大家可以尝试一下。

到此这篇关于.NET轻松实现Excel转PDF的三种方法详解的文章就介绍到这了,更多相关.NET Excel转PDF内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • aspx与ascx,ashx的用法总结

    aspx与ascx,ashx的用法总结

    这篇文章主要是对aspx与ascx,ashx的用法进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-12-12
  • HTML服务器控件和WEB服务器控件的区别和联系介绍

    HTML服务器控件和WEB服务器控件的区别和联系介绍

    学习asp.net的时候一会用Html服务器控件,一会用Web服务器控件,起初做起例子来也挺迷糊的,下面对这两个控件研究了一下做个笔记在此与大家分享下,感兴趣的朋友可以了解下
    2013-08-08
  • Asp.Net Core轻松学习系列之配置文件

    Asp.Net Core轻松学习系列之配置文件

    这篇文章主要给大家介绍了关于Asp.Net Core轻松学习系列之配置文件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • 提交页面的定位--scrollIntoView的用法

    提交页面的定位--scrollIntoView的用法

    提交页面的定位--scrollIntoView的用法...
    2007-03-03
  • asp.net 文件下载实现代码

    asp.net 文件下载实现代码

    文件下载代码,Copy 别人的.需要的朋友可以参考下。
    2010-03-03
  • .NET实现仓储Repository(AI)的操作方法

    .NET实现仓储Repository(AI)的操作方法

    仓储模式是一种在应用程序中使用的设计模式,它将数据访问逻辑与业务逻辑分离,通过仓储接口和仓储实现类,您可以定义和实现数据的增删改查操作,这篇文章主要介绍了.NET 实现仓储Repository(AI),需要的朋友可以参考下
    2023-09-09
  • .NET Core配置TLS Cipher(套件)的详细过程

    .NET Core配置TLS Cipher(套件)的详细过程

    本文以.NET 5为例,只不过针对.NET Core 3或3.1通过工具扫描出的协议套件结果略有所差异,但不影响我们对安全套件的配置,我们使用OpenSSL生成自签名证书,对.NET Core配置TLS Cipher相关知识感兴趣的朋友一起看看吧
    2021-12-12
  • .NET 扩展实现代码

    .NET 扩展实现代码

    增强.net的功能需要用到了扩展实现代码,大家可以参考下
    2008-09-09
  • asp.net删除文件session丢失

    asp.net删除文件session丢失

    如果你曾经修改了ASP.NET应用程序(dll文件),与修改了bin文件夹或Web.config文件(添加/删除/重命名的文件等),而该网站在运行,你可能已经注意到,这将导致在AppDomain的重新启动
    2010-09-09
  • ASP.NET中application对象的使用介绍

    ASP.NET中application对象的使用介绍

    这篇文章主要介绍了ASP.NET中application对象的使用,需要的朋友可以参考下
    2014-04-04

最新评论