diff --git a/src/EPPlus/Export/HtmlExport/Enums/ePictureInclude.cs b/src/EPPlus/Export/HtmlExport/Enums/ePictureInclude.cs index 7084131138..b5e8f7bb97 100644 --- a/src/EPPlus/Export/HtmlExport/Enums/ePictureInclude.cs +++ b/src/EPPlus/Export/HtmlExport/Enums/ePictureInclude.cs @@ -29,6 +29,10 @@ public enum ePictureInclude /// /// Include the images in the html export. /// - Include + Include, + /// + /// Include the images only in the HTML. + /// + IncludeInHtmlOnly } } diff --git a/src/EPPlus/Export/HtmlExport/Exporters/Internal/HtmlExporterBaseInternal.cs b/src/EPPlus/Export/HtmlExport/Exporters/Internal/HtmlExporterBaseInternal.cs index fe400f6cf5..e970079292 100644 --- a/src/EPPlus/Export/HtmlExport/Exporters/Internal/HtmlExporterBaseInternal.cs +++ b/src/EPPlus/Export/HtmlExport/Exporters/Internal/HtmlExporterBaseInternal.cs @@ -11,10 +11,12 @@ Date Author Change 6/4/2022 EPPlus Software AB ExcelTable Html Export *************************************************************************************************/ using OfficeOpenXml.Core; +using OfficeOpenXml.Drawing; using OfficeOpenXml.Drawing.Interfaces; using OfficeOpenXml.Export.HtmlExport.Accessibility; using OfficeOpenXml.Export.HtmlExport.HtmlCollections; using OfficeOpenXml.Export.HtmlExport.Parsers; +using OfficeOpenXml.Export.HtmlExport.Translators; using OfficeOpenXml.Table; using OfficeOpenXml.Utils; using OfficeOpenXml.Utils.String; @@ -146,7 +148,7 @@ protected HTMLElement GetThead(ExcelRangeBase range, List headers = null AddTableData(table, contentElement, col); - if (Settings.Pictures.Include == ePictureInclude.Include) + if (Settings.Pictures.Include == (ePictureInclude.Include | ePictureInclude.IncludeInHtmlOnly)) { image = GetImage(cell.Worksheet.PositionId, cell._fromRow, cell._fromCol); } @@ -267,7 +269,7 @@ protected HTMLElement GetTableBody(ExcelRangeBase range, int row, int endRow) SetColRowSpan(range, tblData, cell); - if (Settings.Pictures.Include == ePictureInclude.Include) + if (Settings.Pictures.Include == (ePictureInclude.Include | ePictureInclude.IncludeInHtmlOnly)) { image = GetImage(cell.Worksheet.PositionId, cell._fromRow, cell._fromCol); } @@ -381,6 +383,24 @@ protected void AddContent(ExcelRangeBase cell, HTMLElement contentElement) } } + + private object GetContentType(ePictureType type) + { + switch (type) + { + case ePictureType.Ico: + return "image/vnd.microsoft.icon"; + case ePictureType.Jpg: + return "image/jpeg"; + case ePictureType.Svg: + return "image/svg+xml"; + case ePictureType.Tif: + return "image/tiff"; + default: + return $"image/{type}"; + } + } + protected void AddImage(HTMLElement parent, HtmlExportSettings settings, HtmlImage image, object value) { if (image != null) @@ -393,7 +413,18 @@ protected void AddImage(HTMLElement parent, HtmlExportSettings settings, HtmlIma { child.AddAttribute("id", imageName); } - child.AddAttribute("class", $"{settings.StyleClassPrefix}image-{name} {settings.StyleClassPrefix}image-prop-{imageName}"); + + if(settings.Pictures.Include == ePictureInclude.IncludeInHtmlOnly) + { + ePictureType? type; + var _encodedImage = ImageEncoder.EncodeImage(image, out type); + + child.AddAttribute("src", $"data:{GetContentType(type.Value)};base64,{_encodedImage}"); + } + else + { + child.AddAttribute("class", $"{settings.StyleClassPrefix}image-{name} {settings.StyleClassPrefix}image-prop-{imageName}"); + } parent._childElements.Add(child); } } diff --git a/src/EPPlus/Export/HtmlExport/Settings/HtmlPictureSettings.cs b/src/EPPlus/Export/HtmlExport/Settings/HtmlPictureSettings.cs index 85e655b042..fabec04d8e 100644 --- a/src/EPPlus/Export/HtmlExport/Settings/HtmlPictureSettings.cs +++ b/src/EPPlus/Export/HtmlExport/Settings/HtmlPictureSettings.cs @@ -22,6 +22,7 @@ internal HtmlPictureSettings() { } + /// /// If picture drawings should be included in the html. Default is /// diff --git a/src/EPPlusTest/Export/HtmlExport/RangeExporterTests.cs b/src/EPPlusTest/Export/HtmlExport/RangeExporterTests.cs index b36d85ad3c..4c8f323d17 100644 --- a/src/EPPlusTest/Export/HtmlExport/RangeExporterTests.cs +++ b/src/EPPlusTest/Export/HtmlExport/RangeExporterTests.cs @@ -195,6 +195,27 @@ public async Task WriteImagesAsync() Assert.AreEqual(html, htmlAsync); } } + + [TestMethod] + public async Task WriteImagesAsyncHTMLOnlyEmbed() + { + using (var p = OpenTemplatePackage("20-CreateAFileSystemReport.xlsx")) + { + var sheet = p.Workbook.Worksheets[0]; + var exporter = sheet.Cells["A1:E30"].CreateHtmlExporter(); + + exporter.Settings.SetColumnWidth = true; + exporter.Settings.SetRowHeight = true; + exporter.Settings.Pictures.Include = ePictureInclude.IncludeInHtmlOnly; + exporter.Settings.Minify = false; + exporter.Settings.Encoding = Encoding.UTF8; + + var html = exporter.GetHtmlString(); + var htmlAsync = await exporter.GetSinglePageAsync(); + File.WriteAllText("c:\\temp\\" + sheet.Name + "_htmlOnly.html", html); + } + } + [TestMethod] public void ExportMultipleRanges() {