Skip to content

Commit 7ff09ab

Browse files
authored
Merge pull request #2460 from EPPlusSoftware/feature/DrawingRendererRefactor
Feature/drawing renderer refactor
2 parents e259df5 + 7292631 commit 7ff09ab

87 files changed

Lines changed: 3264 additions & 1086 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

docs/articles/breakingchanges.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,4 +231,5 @@ The misspelled enum eCompundLineStyle has been renamed eCompoundLineStyle.
231231
### 9.0.0
232232
The misspelled enum eCompundLineStyle has been renamed eCompoundLineStyle.
233233
The misspelled property on drawingFill `Transparancy` has been renamed to `Transparency`
234-
The `Richtext.Baseline` property now always return that value in whole percent.
234+
The `Richtext.Baseline` property now always return that value in whole percent.
235+
ExcelChartSerie.Header now returns null instead of empty string, if the underlaying "tx/v" node does not exist.

docs/articles/fixedissues.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
# Features / Fixed issues - EPPlus 8
2+
## Version 9.0.0
3+
* Added 'Layout' property to 'ExcelChartTrendlineLabel' class.
24
## Version 8.6.3
35
### Security
46
* Updated System.Security.Cryptography.Xml to address five security vulnerabilities in the .NET XML signing dependency: four denial of service vulnerabilities (CVE-2026-47302, CVE-2026-50525, CVE-2026-50527, CVE-2026-50648) and one security feature bypass (CVE-2026-47304). The package is updated to 8.0.4 (.NET Framework, .NET 8 and .NET Standard), 9.0.18 (.NET 9) and 10.0.10 (.NET 10).

src/EPPlus.DrawingRenderer.Tests/Chart/BarChartTests.cs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public void GenerateSvgForBarCharts1()
2222
var ix = 0;
2323
foreach (ExcelChart c in ws.Drawings)
2424
{
25-
var svg = c.ToSvg(x => { x.Size.Width = 100; x.Size.Height = 100; });
25+
var svg = c.ToSvg(/*x => { x.Size.Width = 100; x.Size.Height = 100; }*/);
2626
SaveTextFileToWorkbook($"svg\\BarChartForSvg_sheet1_{ix++}.svg", svg);
2727
}
2828
}
@@ -79,5 +79,22 @@ public void NegativeDatalabelBarCharts()
7979
}
8080
}
8181
}
82+
[TestMethod]
83+
public void GenerateEPPlusBarCharts()
84+
{
85+
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
86+
using (var p = OpenTemplatePackage("datapoints.xlsx"))
87+
{
88+
var ws = p.Workbook.Worksheets[0];
89+
90+
for (int i = 0; i < ws.Drawings.Count; i++)
91+
{
92+
var c = ws.Drawings[i];
93+
var svg = c.ToSvg();
94+
SaveTextFileToWorkbook($"svg\\HorizontalAxisChartForSvg{i}.svg", svg);
95+
}
96+
}
97+
}
98+
8299
}
83100
}
Lines changed: 210 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,210 @@
1+
using OfficeOpenXml;
2+
using OfficeOpenXml.Drawing.Chart;
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Linq;
6+
using System.Text;
7+
8+
namespace EPPlus.DrawingRenderer.Tests.Chart
9+
{
10+
[TestClass]
11+
public class ChartStyleFallbackTest : TestBase
12+
{
13+
14+
[TestMethod]
15+
public void EpplusGeneratedChart()
16+
{
17+
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
18+
19+
20+
using (var p = OpenPackage("StyleExamples\\epplusDefaultTest.xlsx",true))
21+
{
22+
var ws = p.Workbook.Worksheets.Add("EpplusGeneratedChart");
23+
24+
//ws.Workbook.ThemeManager.GetOrCreateTheme();
25+
26+
27+
ws.Cells["A1:A3"].Formula = "ROW()+COLUMN()";
28+
29+
ws.Calculate();
30+
31+
var emptyLines = ws.Drawings.AddLineChart("EmptyLineChart", eLineChartType.Line);
32+
var generatedBar = ws.Drawings.AddBarChart("EpplusBarChart", eBarChartType.ColumnClustered);
33+
34+
generatedBar.SetPosition(1, 1000);
35+
36+
var defaultRect = ws.Drawings.AddShape("MyDefaultShape", OfficeOpenXml.Drawing.eShapeStyle.Round1Rect);
37+
var gradientRect = ws.Drawings.AddShape("GradRect", OfficeOpenXml.Drawing.eShapeStyle.Round1Rect);
38+
39+
defaultRect.SetPosition(300, 1);
40+
gradientRect.SetPosition(300, 1000);
41+
42+
defaultRect.Fill.Style = OfficeOpenXml.Drawing.eFillStyle.SolidFill;
43+
gradientRect.Fill.Style = OfficeOpenXml.Drawing.eFillStyle.GradientFill;
44+
generatedBar.Series.Add(ws.Cells["A1:A3"]);
45+
46+
//foreach (ExcelChart c in ws.Drawings)
47+
//{
48+
// var borderRef = c.StyleManager.Style.ChartArea.BorderReference;
49+
// var borderSetting = c.Border;
50+
// var borderDirectColor = borderSetting.Fill.Color;
51+
52+
// var svg = c.ToSvg();
53+
// SaveTextFileToWorkbook($"svg\\epplusDefault{ws.Name}_{c.Name}.svg", svg);
54+
//}
55+
//GetOutputFile("StyleExamples", "");
56+
SaveAndCleanup(p);
57+
}
58+
}
59+
60+
[TestMethod]
61+
public void ReadEmptyDefaultChartStyle()
62+
{
63+
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
64+
65+
66+
using (var p = OpenTemplatePackage("StyleExamples\\emptyDefault.xlsx"))
67+
{
68+
var ws = p.Workbook.Worksheets[0];
69+
70+
foreach (ExcelChart c in ws.Drawings)
71+
{
72+
var borderRef = c.StyleManager.Style.ChartArea.BorderReference;
73+
var borderSetting = c.Border;
74+
var borderDirectColor = borderSetting.Fill.Color;
75+
76+
var svg = c.ToSvg();
77+
SaveTextFileToWorkbook($"svg\\emptyDefaultStyle{ws.Name}_{c.Name}.svg", svg);
78+
}
79+
GetOutputFile("StyleExamples", "");
80+
SaveAndCleanup(p);
81+
}
82+
}
83+
84+
[TestMethod]
85+
public void RemovedStyles()
86+
{
87+
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
88+
89+
90+
string fileName = "emptyManuallyRemovedLnStyles";
91+
92+
using (var p = OpenTemplatePackage($"StyleExamples\\{fileName}.xlsx"))
93+
{
94+
var ws = p.Workbook.Worksheets[0];
95+
96+
foreach (var d in ws.Drawings)
97+
{
98+
if (d is ExcelChart c)
99+
{
100+
var borderSetting = c.Border;
101+
var borderDirectColor = borderSetting.Fill.Color;
102+
var theme = p.Workbook.ThemeManager.GetOrCreateTheme();
103+
104+
var defaultColorFromTheme = theme.ColorScheme.Dark1;
105+
106+
var svg = c.ToSvg();
107+
SaveTextFileToWorkbook($"svg\\{fileName}_{ws.Name}_{c.Name}.svg", svg);
108+
}
109+
}
110+
GetOutputFile("StyleExamples", "");
111+
SaveAndCleanup(p);
112+
113+
}
114+
}
115+
116+
[TestMethod]
117+
public void EditedTheme()
118+
{
119+
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
120+
121+
122+
string fileName = "ExcelThemeEdited";
123+
124+
using (var p = OpenTemplatePackage($"StyleExamples\\{fileName}.xlsx"))
125+
{
126+
var ws = p.Workbook.Worksheets[0];
127+
128+
foreach (var d in ws.Drawings)
129+
{
130+
if (d is ExcelChart c)
131+
{
132+
//var borderSetting = c.Border;
133+
//var borderDirectColor = borderSetting.Fill.Color;
134+
//var theme = p.Workbook.ThemeManager.GetOrCreateTheme();
135+
136+
//var defaultColorFromTheme = theme.ColorScheme.Dark1;
137+
138+
var svg = c.ToSvg();
139+
SaveTextFileToWorkbook($"svg\\{fileName}_{ws.Name}_{c.Name}.svg", svg);
140+
}
141+
}
142+
GetOutputFile("StyleExamples", "");
143+
SaveAndCleanup(p);
144+
145+
}
146+
}
147+
148+
149+
[TestMethod]
150+
public void ManualSystemText()
151+
{
152+
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
153+
154+
string fileName = "ExcelThemeManualSystemText";
155+
156+
using (var p = OpenTemplatePackage($"StyleExamples\\{fileName}.xlsx"))
157+
{
158+
var ws = p.Workbook.Worksheets[0];
159+
160+
foreach (var d in ws.Drawings)
161+
{
162+
if (d is ExcelChart c)
163+
{
164+
var borderSetting = c.Border;
165+
var borderDirectColor = borderSetting.Fill.Color;
166+
var theme = p.Workbook.ThemeManager.GetOrCreateTheme();
167+
168+
var defaultColorFromTheme = theme.ColorScheme.Dark1;
169+
170+
var svg = c.ToSvg();
171+
SaveTextFileToWorkbook($"svg\\{fileName}_{ws.Name}_{c.Name}.svg", svg);
172+
}
173+
}
174+
GetOutputFile("StyleExamples", "");
175+
SaveAndCleanup(p);
176+
}
177+
}
178+
179+
180+
[TestMethod]
181+
public void ExcelThemeLnDeleted()
182+
{
183+
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
184+
185+
string fileName = "ExcelThemeLnDeleted";
186+
187+
using (var p = OpenTemplatePackage($"StyleExamples\\{fileName}.xlsx"))
188+
{
189+
var ws = p.Workbook.Worksheets[0];
190+
191+
foreach (var d in ws.Drawings)
192+
{
193+
if (d is ExcelChart c)
194+
{
195+
var borderSetting = c.Border;
196+
var borderDirectColor = borderSetting.Fill.Color;
197+
var theme = p.Workbook.ThemeManager.GetOrCreateTheme();
198+
199+
var defaultColorFromTheme = theme.ColorScheme.Dark1;
200+
201+
var svg = c.ToSvg();
202+
SaveTextFileToWorkbook($"svg\\{fileName}_{ws.Name}_{c.Name}.svg", svg);
203+
}
204+
}
205+
GetOutputFile("StyleExamples", "");
206+
SaveAndCleanup(p);
207+
}
208+
}
209+
}
210+
}

src/EPPlus.DrawingRenderer.Tests/Chart/ComboChartTests.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,24 @@ public void GenerateSvgForComboCharts_sheet1()
2727
}
2828
}
2929
}
30+
[TestMethod]
31+
public void GenerateSvgForComboCharts_sheet4()
32+
{
33+
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
34+
using (var p = OpenTemplatePackage("ChartForSvg.xlsx"))
35+
{
36+
var ws = p.Workbook.Worksheets[3];
37+
var ix = 1;
38+
var c = ws.Drawings[ix];
39+
var svg = c.ToSvg();
40+
SaveTextFileToWorkbook($"svg\\ChartForSvg_sheet2_{ix++}.svg", svg);
41+
//var ix = 1;
42+
//foreach (ExcelChart c in ws.Drawings)
43+
//{
44+
// var svg = c.ToSvg();
45+
// SaveTextFileToWorkbook($"svg\\ChartForSvg_Combo_Sheet4{ix++}.svg", svg);
46+
//}
47+
}
48+
}
3049
}
3150
}

0 commit comments

Comments
 (0)