<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          三種方法讓 .NET 輕松實現(xiàn) Excel 轉(zhuǎn) PDF

          共 1584字,需瀏覽 4分鐘

           ·

          2023-06-20 20:17


          ?前言

          前一段時間有網(wǎng)友問Excel轉(zhuǎn)pdf怎么轉(zhuǎn)pdf,小編幫他實現(xiàn)了一個,方法是使用EPPlus和PdfSharp組件實現(xiàn),由于依賴OfficeOpenXml他也沒有用上,后來小編又實現(xiàn)了二種不依賴OfficeOpenXml的方法。


          本文將介紹這三種方法實現(xiàn)Excel轉(zhuǎn)pdf。


          一、EPPlus和PdfSharp組件實現(xiàn)


          邏輯是先將Excel內(nèi)容轉(zhuǎn)換為HTML字符串,然后再將HTML字符串轉(zhuǎn)換為PDF文件。

          轉(zhuǎn)換過程中的格式和樣式可能會有一些差異,您可能需要根據(jù)需求進(jìn)行進(jìn)一步的調(diào)整和優(yōu)化。

          使用方法

          1、首先使用“NuGet 包管理器”安裝EPPlus和PdfSharp

          2、在代碼頁面引用??

          ??
          using?IronPdf;
          using?OfficeOpenXml;

          3、建兩個方法ConvertExcelToPdf和ExcelToHtml
          ConvertExcelToPdf方法用于將Excel文件轉(zhuǎn)換為PDF文件,ExcelToHtml這個方法將Excel工作表的內(nèi)容轉(zhuǎn)換為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];?//?假設(shè)要轉(zhuǎn)換的工作表是第一個工作表

          ????????//?創(chuàng)建一個HTML字符串,將Excel內(nèi)容轉(zhuǎn)換為HTML
          ????????string?htmlContent?=?ExcelToHtml(worksheet);

          ????????//?使用IronPDF將HTML字符串轉(zhuǎn)換為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("");
          ????????}

          ????????sb.AppendLine("");
          ????}
          ????sb.AppendLine("
          "?+?(cellValue?!=?null???cellValue.ToString()?:?"")?+?"
          "
          );
          ????return?sb.ToString();
          }

          //調(diào)用方法
          string?excelFilePath?=?"C:\\Users\\user\\Desktop\\test.xlsx";
          string?pdfFilePath?=?"C:\\Users\\user\\Desktop\\test.pdf";
          exceltopdf.ConvertExcelToPdf(excelFilePath,?pdfFilePath);

          主要有兩個方法:

          ConvertExcelToPdf: 這個方法用于將Excel文件轉(zhuǎn)換為PDF文件。

          它首先使用ExcelPackage類從Excel文件中讀取數(shù)據(jù)。

          然后,調(diào)用ExcelToHtml方法將Excel內(nèi)容轉(zhuǎn)換為HTML字符串。接下來,使用IronPDF庫中的HtmlToPdf類將HTML字符串轉(zhuǎn)換為PDF對象。

          最后,將PDF對象保存到指定的PDF文件路徑中。

          ExcelToHtml:?這個方法將Excel工作表的內(nèi)容轉(zhuǎn)換為HTML字符串。

          它使用StringBuilder來構(gòu)建HTML字符串。

          首先,它添加

          標(biāo)簽作為表格的開始。

          然后,通過遍歷工作表的行和列,將每個單元格的值添加到HTML字符串中作為一個

          元素。

          最后,添加

          標(biāo)簽作為表格的結(jié)束,并將構(gòu)建好的HTML字符串返回。

          缺點(diǎn):此方法可能需要依賴office,網(wǎng)友回復(fù)反饋;另外需要用html進(jìn)行格式處理,也是個麻煩事情。

          效果

          二、Spire組件實現(xiàn)

          邏輯是首先使用Spire.XLS庫加載Excel文件,并使用Spire.PDF庫創(chuàng)建PDF文檔。

          然后,我們遍歷Excel文件的每個工作表,將表格內(nèi)容逐個繪制到PDF頁面上。

          使用方法

          1、首先使用"NuGet 包管理器"安裝Spire。注意的是需要安裝Spire,不要安裝Spire.XLS和Spire.PDF否則會出現(xiàn)不兼容的問題。

          2、在代碼頁面引用

          using?Spire.Pdf;
          using?Spire.Pdf.Graphics;
          using?Spire.Xls;

          3、只需要建一個方法ConvertExcelToPdf。傳入要轉(zhuǎn)換的excel路徑和輸出的路徑,代碼如下:

          public?static?void?ConvertExcelToPdf(string?excelFilePath,?string?pdfFilePath)
          {
          ????//?加載Excel文件
          ????Workbook?workbook?=?new?Workbook();
          ????workbook.LoadFromFile(excelFilePath);
          ????//?創(chuàng)建PDF文檔
          ????PdfDocument?pdfDocument?=?new?PdfDocument();
          ????//?添加Excel表格內(nèi)容到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表格的行數(shù)和列數(shù)
          ????????int?rowCount?=?sheet.LastRow?+?1;
          ????????int?columnCount?=?sheet.LastColumn?+?1;
          ????????//?將Excel表格內(nèi)容逐個添加到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)
          ????????????????//?繪制單元格內(nèi)容到PDF頁面
          ????????????????{
          ????????????????????pdfPage.Canvas.DrawString(value,?fonts,?PdfBrushes.Black,?column?*?70,?row?*?20);
          ????????????????}
          ????????????}
          ????????}
          ????}
          ????//?保存PDF文件
          ????pdfDocument.SaveToFile(pdfFilePath);
          ????Console.WriteLine("PDF轉(zhuǎn)換完成。");
          }
          //調(diào)用方法跟上面一樣

          此方法需要注意的是Spire默認(rèn)不支持中文,需要我們單獨(dú)引用中文字庫,在代碼的13行就是引用字庫的地方,大家可以把字庫拷貝到自己的項目引用。

          缺點(diǎn):默認(rèn)不支持中文字庫,需要單獨(dú)引用;另外輸出格式不帶表格(可能可以調(diào));

          免費(fèi)版本有水印,這個網(wǎng)上有解決方案,大家可以去某度搜索。

          效果如下:

          三、NPOI和iTextSharp組件實現(xiàn)

          邏輯是通過使用NPOI庫讀取Excel文件,然后使用iTextSharp庫創(chuàng)建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主要作業(yè)是字符格式轉(zhuǎn)換。

          ConvertExcelToPdf傳入要轉(zhuǎn)的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);
          ????????//?創(chuàng)建PDF文檔
          ????????Document?document?=?new?Document();
          ????????//?創(chuàng)建PDF寫入器
          ????????PdfWriter?writer?=?PdfWriter.GetInstance(document,?new?FileStream(pdfFilePath,?FileMode.Create));
          ????????//?打開PDF文檔
          ????????document.Open();
          ????????//?添加Excel表格內(nèi)容到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);
          ????????//?關(guān)閉PDF文檔
          ????????document.Close();
          ????}
          ????Console.WriteLine("PDF轉(zhuǎn)換完成。");
          }
          static?Font?GetChineseFont()
          {
          ????var?baseFont?=?BaseFont.CreateFont(@"C:\Windows\Fonts\simfang.ttf",?BaseFont.IDENTITY_H,?BaseFont.EMBEDDED);
          ????return?new?Font(baseFont,?12);
          }
          //調(diào)用方法跟方法一一樣

          此方法跟Spire一樣默認(rèn)不支持中文,需要我們單獨(dú)引用中文字庫,方法GetChineseFont就是處理引用中文字庫。

          另外需要需要在 NuGet 里添加 System.Text.Encoding.CodePages并注冊,否則會報錯,注冊如下。

          Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

          缺點(diǎn):此方法也比較坑,不支持中文,還需要引用額外的字庫支持組件CodePages。

          效果如下:

          結(jié)語

          本文介紹了.NET三種方法實現(xiàn)Excel轉(zhuǎn)pdf,他們各有優(yōu)點(diǎn),第一種可以自定義樣式,第二種依賴獨(dú)立組件,第三種顯示效果更佳,從使用效果來看小編推薦第三種。

          其實還有很多組件實現(xiàn)Excel轉(zhuǎn)pdf,比如Aspose.Cells,有的需要授權(quán)收取費(fèi)用、大家自己可以研究一下。

          本項目是基于.NET 7在windows下測試運(yùn)行,在linux下沒有實驗過,大家可以嘗試一下。大家還有什么好的方式實現(xiàn)Excel轉(zhuǎn)pdf呢?歡迎留言討論。

          轉(zhuǎn)自:翔星

          鏈接:mp.weixin.qq.com/s/7NVe7wr2eVLs-lN2GHILSg


          瀏覽 31
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  99热这里只有精品在线观看 | 麻豆国产精品一区 | 超级人人干 | 日本黄色电影在线 | 一区中文|