Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 日韩欧美一区二区精品久久,国产一区二区三区在线看片,天天干天天干

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          三種方法讓.NET輕松實現Excel轉PDF

          三種方法讓.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下沒有實驗過,大家可以嘗試一下。大家還有什么好的方式實現Excel轉pdf呢?歡迎留言討論。

          sp.net為了縮短開發周期,搭建了一個快速開發平臺。



          如果是做OA、CRM、ERP一類的管理系統,如果為了縮短開發周期,搭建一個快速開發平臺,再配合一些快速開發的組件開發效率能提高很多。



          1.框架用到的技術

          (1)前臺技術:ajax+Jquery+jqgrid+Bootstrap

          (2)開發環境:VS2015-VS2019

          (3)數據庫:SQL Server,Oracle、Mysql

          (5)后臺技術:ASP.NET MVC,TinyIoc(IoC容器),EF(ORM框架),layui框架或vue,Log4Net,NPOI等

          2.框架主要功能展示

          手機端是通過html做前端開發,通過ajax與后臺webapi接口做交互。開發完成后可以打包成應用提供給用戶下載

          顧上次更新文章已經過去一個多月了;今天正好趁著空閑時間趕緊來分享一篇最近幫一個老哥實現的效果,二話不多說直接看效果:
          1、使用NPOI把集合對象轉Excel文件,參考:
          https://www.cnblogs.com/Ajoying/p/8005032.html
          2、關于圖片我是提前把他們緩存到本地了:
          • for(int i=0; i < GoodList.Count; i++) { string name=GoodList[i].title; string cover=GoodList[i].cover; using(WebClient client=new WebClient()) { //client.DownloadFile(new Uri(cover), $"{rootPath}\{name}.png"); // OR  try { client.DownloadFile(new Uri(cover), $ "{rootPath}\{i+1}.jpeg"); Thread.Sleep(50); } catch(Exception ex) { Console.WriteLine(ex.Message); } } this.BeginInvoke(new Action(()=> { MyProgressBar.Value=i; })); }

            3、把緩存的圖片插入到指定的單元格內:

            • string imagePath=$ "{AppDomain.CurrentDomain.BaseDirectory}Cache\{rowIndex}.jpeg";//從本地獲取var bytes=File.ReadAllBytes(imagePath);if(bytes != && bytes.Length !=0){ //byte[] bytes=System.IO.File.ReadAllBytes(datarow["picture"].ToString()); int pictureIdx=workbook.AddPicture(bytes, PictureType.JPEG); HSSFPatriarch patriarch=(HSSFPatriarch) sheet.CreateDrawingPatriarch(); HSSFClientAnchor anchor=new HSSFClientAnchor(70, 40, 0, 0, 1, rowIndex, 0, rowIndex + 1); //把圖片插到相應的位置 HSSFPicture pict=(HSSFPicture) patriarch.CreatePicture(anchor, pictureIdx); // 指定我想要的長寬 double standardWidth=220; double standardHeight=100; // 計算單元格的長寬 double cellWidth=sheet.GetColumnWidthInPixels(cell.ColumnIndex); double cellHeight=cell.Row.HeightInPoints / 72 * 96; // 計算需要的長寬比例的系數 double a=standardWidth / cellWidth; double b=standardHeight / cellHeight; pict.Resize(a, b);}

              最終簡單的效果先這樣吧;以后有時間的話,可以再去摸索一下更復雜的效果;編程不息、Bug不止、無Bug、無生活;改bug的冷靜、編碼的激情、完成后的喜悅、挖坑的激動 、填坑的興奮;這也許就是屌絲程序員的樂趣吧;今天就到這里吧;希望自己有動力一步一步堅持下去;生命不息,代碼不止;大家抽空可以看看今天分享的效果,有好的意見和想法,可以在留言板隨意留言;我看到后會第一時間回復大家,多謝大家的一直默默的關注和支持!


          主站蜘蛛池模板: 福利一区国产原创多挂探花| 久久国产香蕉一区精品| 亚洲色精品vr一区二区三区| 无码aⅴ精品一区二区三区浪潮| 国产精品亚洲一区二区在线观看 | 一区二区中文字幕| 日韩精品一区二区三区中文3d| 日本不卡一区二区三区| 一区二区三区在线播放视频| 亚洲AV日韩综合一区尤物| 国产一区二区三区在线2021| 一区二区三区杨幂在线观看| 成人区人妻精品一区二区不卡| 亚洲中文字幕在线无码一区二区| 国产爆乳无码一区二区麻豆| 亚洲第一区精品日韩在线播放| 无码国产精品一区二区免费I6| 久久综合亚洲色一区二区三区| 狠狠综合久久AV一区二区三区| 内射一区二区精品视频在线观看 | 国产熟女一区二区三区四区五区| 日韩一区二区三区电影在线观看| 精品欧洲AV无码一区二区男男| 无码日韩精品一区二区免费暖暖| 久久精品一区二区影院| 一区二区三区日本视频| 亚洲一区二区三区在线播放| 国产伦一区二区三区免费| 成人无号精品一区二区三区| 精品国产一区二区三区免费看| 日本高清一区二区三区| 亚洲av色香蕉一区二区三区蜜桃| 97精品国产一区二区三区| 亚洲美女一区二区三区| 久久伊人精品一区二区三区| 亚洲一区精品视频在线| 国产日韩精品视频一区二区三区 | 精品日韩一区二区三区视频| 亚洲综合无码一区二区痴汉| 亚洲AV日韩AV一区二区三曲| 亚洲欧美日韩中文字幕在线一区|