Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
0fdf13c
WIP:Refactor
JanKallman Jan 21, 2026
504b2a9
WIP:Fixed errors
JanKallman Jan 21, 2026
0686c3d
WIP:Fixed more errors
JanKallman Jan 21, 2026
e1b72c2
Fixed broken shape drawing (bounds were not set)
OssianEPPlus Jan 21, 2026
639eded
Fixes issue #2254
JanKallman Jan 21, 2026
edc55c2
Ugly quick-fix shape theme colors
OssianEPPlus Jan 21, 2026
31eed72
Added missing file
OssianEPPlus Jan 21, 2026
ffc48b1
Added theme to base renderItem constructor. Added paragraph default font
OssianEPPlus Jan 21, 2026
078dffd
Merge pull request #2255 from EPPlusSoftware/bug/issue2254
AdrianEPPlus Jan 22, 2026
a1c2a97
WIP:Fixes for text handling in new implementation
JanKallman Jan 22, 2026
30e2245
added corrected fillcolors and paragraph spacing
OssianEPPlus Jan 22, 2026
5c4c7eb
Merge branch 'svg_render_refactor' of https://github.com/EPPlusSoftwa…
OssianEPPlus Jan 22, 2026
158f1da
Potential solve if string.Concat was the issue (#2256)
OssianEPPlus Jan 22, 2026
a13994f
Changed AddText to use DefaultParagraph instead.
JanKallman Jan 23, 2026
6220013
Merge branch 'svg_render_refactor' of https://github.com/EPPlusSoftwa…
JanKallman Jan 23, 2026
31c9164
Tried to fix center align. WIP
OssianEPPlus Jan 23, 2026
70aeb9c
Merge branch 'svg_render_refactor' of https://github.com/EPPlusSoftwa…
OssianEPPlus Jan 23, 2026
0361ee3
Wip:text fixes
JanKallman Jan 23, 2026
a1fbf1a
Merge branch 'svg_render_refactor' of https://github.com/EPPlusSoftwa…
JanKallman Jan 23, 2026
26bd11c
Still two pixels off. Likely Border size
OssianEPPlus Jan 23, 2026
ab5f681
Merge branch 'svg_render_refactor' of https://github.com/EPPlusSoftwa…
OssianEPPlus Jan 23, 2026
c676d44
WIP:Fixed bounding boxes to tranform to inherit from transform
JanKallman Jan 26, 2026
9b503ea
Merge branch 'svg_render_refactor' of https://github.com/EPPlusSoftwa…
JanKallman Jan 26, 2026
70a180e
Merge fix
JanKallman Jan 26, 2026
c473333
Fixed minor spelling mistake
OssianEPPlus Jan 26, 2026
c1440a2
Adjusted rectangle to not be doubled
OssianEPPlus Jan 26, 2026
3e2e267
WIP:Fixes for the Svg Textbox in differnet chart objects.
JanKallman Jan 27, 2026
598f287
fixed endgroup for shape + minor misspelling
OssianEPPlus Jan 27, 2026
ead2a74
Merge branch 'svg_render_refactor' of https://github.com/EPPlusSoftwa…
OssianEPPlus Jan 27, 2026
c943e1a
removed unimplemented function
OssianEPPlus Jan 27, 2026
2b097f0
Measurer from > to >= to adjust for round. + test debug
OssianEPPlus Jan 27, 2026
d106685
WIP:Fixes for new positioning system
JanKallman Jan 28, 2026
5680417
Merge branch 'svg_render_refactor' of https://github.com/EPPlusSoftwa…
JanKallman Jan 28, 2026
719766a
Major re-write of line handling
OssianEPPlus Jan 28, 2026
1b72f82
WIP:Textbox fixes+powerquery metadata
JanKallman Jan 29, 2026
de22714
Fixes issue #2261
JanKallman Jan 29, 2026
8b9930d
WIP:Textbox
JanKallman Jan 29, 2026
5a14d9f
Broken messy solution
OssianEPPlus Jan 29, 2026
3c99960
Merge develop8. Minor fixes axis values.
JanKallman Jan 30, 2026
c246dbc
Added more checks on the ExcelCustomXml.Save method - #2254 (#2264)
JanKallman Jan 30, 2026
83e52ca
Fixed the major issues. width still wrong after 1st line
OssianEPPlus Jan 30, 2026
a6aadb6
WIP:Work on auto value axis
JanKallman Feb 2, 2026
2d1089a
Fixes issue #2265 (#2267)
JanKallman Feb 2, 2026
8c3fe47
fixed checking for negative sign when using custom number format. (#2…
AdrianEPPlus Feb 2, 2026
d533f64
Merge pull request #2262 from EPPlusSoftware/bug/issue2261
AdrianEPPlus Feb 3, 2026
728ec9e
Functional non-bugged return of textLines
OssianEPPlus Feb 3, 2026
2bc40d9
Merge branch 'svg_render_refactor' of https://github.com/EPPlusSoftwa…
OssianEPPlus Feb 3, 2026
f5c2f43
Merge branch 'fix/safety-branch-2' into svg_render_refactor
OssianEPPlus Feb 3, 2026
4302a47
WIP:Added support for stacked line charts
JanKallman Feb 3, 2026
fecba85
Removed check for double negative sign in custom format. Replaced by …
AdrianEPPlus Feb 4, 2026
d9a169c
EPPlus version 8.4.2
JanKallman Feb 4, 2026
bbfb22f
Merge branch 'develop8' into svg_render_refactor
JanKallman Feb 4, 2026
aa2a7d0
Added functional implementation of new system
OssianEPPlus Feb 4, 2026
0cd3b10
Cleanup and starting to add to addtext
OssianEPPlus Feb 4, 2026
0587db2
Merge branch 'svg_render_refactor' of https://github.com/EPPlusSoftwa…
OssianEPPlus Feb 4, 2026
96945c5
Made it work for charts/regular text
OssianEPPlus Feb 4, 2026
d9d9183
WIP:Added glow effect for chart objects.
JanKallman Feb 5, 2026
cac5307
Merge branch 'svg_render_refactor' of https://github.com/EPPlusSoftwa…
JanKallman Feb 5, 2026
501c8ee
Fixed test and a few minor bugs
OssianEPPlus Feb 5, 2026
3dfd6fe
Merge branch 'svg_render_refactor' of https://github.com/EPPlusSoftwa…
OssianEPPlus Feb 5, 2026
c325fc1
Merge branch 'develop9' into svg_render_refactor
OssianEPPlus Feb 5, 2026
c6de918
fixed constructor RunItem now point height
OssianEPPlus Feb 5, 2026
f21dec0
WIP:Changed to unit for bounds to use points everyware. Changed svg r…
JanKallman Feb 6, 2026
75fc718
WIP:Changed to Points in bound and Pixels in render.
JanKallman Feb 6, 2026
ac45336
Switched additional classes to point from pixel
OssianEPPlus Feb 6, 2026
b05b2aa
Merge branch 'svg_render_refactor' of https://github.com/EPPlusSoftwa…
OssianEPPlus Feb 6, 2026
4554c6a
Merge branch 'develop9' into fix/render-refactor-missmatch
OssianEPPlus Feb 9, 2026
9503b8d
Merge branch 'svg_render_refactor' into fix/render-refactor-missmatch
OssianEPPlus Feb 9, 2026
724e946
Fixed rename merge issue
OssianEPPlus Feb 9, 2026
f10f5b3
Merge
JanKallman Feb 9, 2026
22f2342
Fixed calculation error for fonts of same size
OssianEPPlus Feb 9, 2026
e4221d4
Merge branch 'svg_render_refactor' of https://github.com/EPPlusSoftwa…
OssianEPPlus Feb 9, 2026
396134c
Removed commented out classes
OssianEPPlus Feb 9, 2026
d4fbee2
Removed old unused TestContainer debug concept
OssianEPPlus Feb 9, 2026
a22f7f2
Fixed textLines wrapper
OssianEPPlus Feb 10, 2026
395f75a
WIP: Fixed several issues related to Textboxes
JanKallman Feb 11, 2026
39ebc9f
Merge branch 'svg_render_refactor' of https://github.com/EPPlusSoftwa…
JanKallman Feb 11, 2026
a2f5fbb
fixed bug in textData. Started textLines refactor
OssianEPPlus Feb 11, 2026
19ba1a0
Merge branch 'svg_render_refactor' of https://github.com/EPPlusSoftwa…
OssianEPPlus Feb 11, 2026
8fdea6c
Recommit last commit
OssianEPPlus Feb 11, 2026
34231ed
Nearly functrional refactor
OssianEPPlus Feb 11, 2026
2c9555a
Wrapping improvements
OssianEPPlus Feb 19, 2026
238cd77
Removed irrelevant tests
OssianEPPlus Feb 19, 2026
84a4d21
Fixed richtext wrapping
OssianEPPlus Feb 20, 2026
2a4a3d5
Removed unneccesary if
OssianEPPlus Feb 20, 2026
48ae218
Removed unused variables/cleanup
OssianEPPlus Feb 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 14 additions & 12 deletions src/EPPlus.Export.ImageRenderer.Test/SvgPathTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -346,7 +346,7 @@ public void CustomPath()
var ws = p.Workbook.Worksheets[0];
//var d = ws.Drawings[0].As.Shape;
//Assert.AreEqual(1, d.CustomGeom.DrawingPaths.Count);
//d.Textbox = "Rectangle Rectangle Rectangle Rectangle";
//d.Textbox = "GetRectangle GetRectangle GetRectangle GetRectangle";
//d.TextAlignment = OfficeOpenXml.Drawing.eTextAlignment.Left;
//d.TextAnchoring = OfficeOpenXml.Drawing.eTextAnchoringType.Bottom;
var renderer = new EPPlusImageRenderer.ImageRenderer();
Expand Down Expand Up @@ -511,20 +511,22 @@ public void GenerateSvgForCharts()
{
var ws = p.Workbook.Worksheets[0];
var renderer = new EPPlusImageRenderer.ImageRenderer();
//var ix = 0;
//var c = ws.Drawings[ix];
//var svg = renderer.RenderDrawingToSvg(c);
//SaveTextFileToWorkbook($"svg\\ChartForSvg_ind{ix++}.svg", svg);
var ix = 1;
foreach (ExcelChart c in ws.Drawings)
{
var svg = renderer.RenderDrawingToSvg(c);
SaveTextFileToWorkbook($"svg\\ChartForSvg{ix++}.svg", svg);
}

var ix = 2;
var c = ws.Drawings[ix];
var svg = renderer.RenderDrawingToSvg(c);
SaveTextFileToWorkbook($"svg\\ChartForSvg_ind{ix++}.svg", svg);

//var ix = 1;
//foreach (ExcelChart c in ws.Drawings)
//{
// var svg = renderer.RenderDrawingToSvg(c);
// SaveTextFileToWorkbook($"svg\\ChartForSvg{ix++}.svg", svg);
//}
}
}
[TestMethod]
public void GenerateSvgForLineCharts()
public void GenerateSvgForLineCharts()
{
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
using (var p = OpenTemplatePackage("LineChartRenderTest.xlsx"))
Expand Down
132 changes: 0 additions & 132 deletions src/EPPlus.Export.ImageRenderer.Test/TestTextContainer.cs

This file was deleted.

136 changes: 68 additions & 68 deletions src/EPPlus.Export.ImageRenderer/ImageRenderer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ Date Author Change
using EPPlus.Export.ImageRenderer.Svg;
using EPPlus.Export.ImageRenderer.Svg.NodeAttributes;
using EPPlus.Export.ImageRenderer.Svg.Writer;
using EPPlus.Export.ImageRenderer.Text;
using EPPlus.Fonts.OpenType;
using EPPlus.Graphics;
using EPPlusImageRenderer.Svg;
Expand All @@ -37,7 +36,6 @@ public class ImageRenderer
{
public string RenderDrawingToSvg(ExcelDrawing drawing)
{
drawing.GetSizeInPixels(out int width, out int height);
var sb = new StringBuilder();
if (drawing is ExcelShape shape)
{
Expand All @@ -54,6 +52,8 @@ public string RenderDrawingToSvg(ExcelDrawing drawing)

throw new NotImplementedException("Image rendering for drawing type not implemented.");
}


//public string RenderRangeToSvg(ExcelRange range)
//{
// var ws = range.Worksheet;
Expand All @@ -80,33 +80,33 @@ public string RenderDrawingToSvg(ExcelDrawing drawing)
// return sb.ToString();
//}

public string RenderBox(string boxText)
{
string retStr = "";
var container = new TextContainerBase(boxText);
var element = GenerateSvg(container);
//public string RenderBox(string boxText)
//{
// string retStr = "";
// var container = new TextContainerBase(boxText);
// var element = GenerateSvg(container);

using (var ms = EPPlusMemoryManager.GetStream())
{
SvgWriter writer = new SvgWriter(ms, Encoding.UTF8);
writer.RenderSvgElement(element, true);
ms.Position = 0;
using (var sr = new StreamReader(ms))
{
retStr = sr.ReadToEnd();
return retStr;
}
}
// using (var ms = EPPlusMemoryManager.GetStream())
// {
// SvgWriter writer = new SvgWriter(ms, Encoding.UTF8);
// writer.RenderSvgElement(element, true);
// ms.Position = 0;
// using (var sr = new StreamReader(ms))
// {
// retStr = sr.ReadToEnd();
// return retStr;
// }
// }

//writer.RenderSvgElement(element, true);
// //writer.RenderSvgElement(element, true);

//StreamReader reader = new StreamReader(ms);
//retStr = reader.ReadToEnd();
// //StreamReader reader = new StreamReader(ms);
// //retStr = reader.ReadToEnd();

////SvgParagraph para = new SvgParagraph(container.GetContent(),);
////var doc = new SvgEpplusDocument();
//return retStr;
}
// ////SvgParagraph para = new SvgParagraph(container.GetContent(),);
// ////var doc = new SvgEpplusDocument();
// //return retStr;
//}

//public string RenderTextBody(ExcelTextBody body, double shapeWidth, double shapeHeight)
//{
Expand Down Expand Up @@ -178,61 +178,61 @@ internal SvgElement GetDefinitions(BoundingBox boundingBox, out string nameId, b
return def;
}

internal SvgElement GenerateSvg(TextContainerBase container)
{
var fullString = container.GetContent();
//internal SvgElement GenerateSvg(TextContainerBase container)
//{
// var fullString = container.GetContent();

var doc = new SvgEpplusDocument(500, 500);
// var doc = new SvgEpplusDocument(500, 500);

var bg = new SvgElement("rect");
bg.AddAttribute("width", "100%");
bg.AddAttribute("height", "100%");
bg.AddAttribute("fill", "red");
bg.AddAttribute("opacity", "0.1");
// var bg = new SvgElement("rect");
// bg.AddAttribute("width", "100%");
// bg.AddAttribute("height", "100%");
// bg.AddAttribute("fill", "red");
// bg.AddAttribute("opacity", "0.1");

var nameId = "boundingBox";
var def = new SvgElement("defs");
var clipPath = new SvgElement("clipPath");
clipPath.AddAttribute("id", nameId);
// var nameId = "boundingBox";
// var def = new SvgElement("defs");
// var clipPath = new SvgElement("clipPath");
// clipPath.AddAttribute("id", nameId);

def.AddChildElement(clipPath);
// def.AddChildElement(clipPath);

var bb = new SvgElement("rect");
bb.AddAttribute("x", container.Position.X);
bb.AddAttribute("y", container.Position.Y);
bb.AddAttribute("width", container.Width);
bb.AddAttribute("height", container.Height);
//bb.AddAttribute("fill", "blue");
//bb.AddAttribute("opacity", "0.5");
// var bb = new SvgElement("rect");
// bb.AddAttribute("x", container.Position.X);
// bb.AddAttribute("y", container.Position.Y);
// bb.AddAttribute("width", container.Width);
// bb.AddAttribute("height", container.Height);
// //bb.AddAttribute("fill", "blue");
// //bb.AddAttribute("opacity", "0.5");

clipPath.AddChildElement(bb);
// clipPath.AddChildElement(bb);

var fontSizePx = 16d;
// var fontSizePx = 16d;

var renderElement = new SvgElement("text");
renderElement.AddAttribute("x", container.Position.X);
renderElement.AddAttribute("y", container.Position.Y + fontSizePx);
renderElement.AddAttribute("_measurementFont-size", $"{fontSizePx}px");
renderElement.AddAttribute("clip-path", $"url(#{nameId})");
// var renderElement = new SvgElement("text");
// renderElement.AddAttribute("x", container.Position.X);
// renderElement.AddAttribute("y", container.Position.Y + fontSizePx);
// renderElement.AddAttribute("_measurementFont-size", $"{fontSizePx}px");
// renderElement.AddAttribute("clip-path", $"url(#{nameId})");

renderElement.Content = fullString;
// renderElement.Content = fullString;

var bbVisual = new SvgElement("rect");
bbVisual.AddAttribute("x", container.Position.X);
bbVisual.AddAttribute("y", container.Position.Y);
bbVisual.AddAttribute("width", container.Width);
bbVisual.AddAttribute("height", container.Height);
bbVisual.AddAttribute("fill", "blue");
bbVisual.AddAttribute("opacity", "0.5");
// var bbVisual = new SvgElement("rect");
// bbVisual.AddAttribute("x", container.Position.X);
// bbVisual.AddAttribute("y", container.Position.Y);
// bbVisual.AddAttribute("width", container.Width);
// bbVisual.AddAttribute("height", container.Height);
// bbVisual.AddAttribute("fill", "blue");
// bbVisual.AddAttribute("opacity", "0.5");

doc.AddChildElement(def);
doc.AddChildElement(bg);
doc.AddChildElement(bbVisual);
doc.AddChildElement(renderElement);
// doc.AddChildElement(def);
// doc.AddChildElement(bg);
// doc.AddChildElement(bbVisual);
// doc.AddChildElement(renderElement);

doc.AddAttributes();
// doc.AddAttributes();

return doc;
}
// return doc;
//}
}
}
Loading