Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
97 commits
Select commit Hold shift + click to select a range
23a7474
#2455 - Addedgit status hook for naming copied pivot tables during wo…
swmal Aug 10, 2026
9a1bc62
Base theme fallback system functional for borders
OssianEPPlus Aug 11, 2026
6d69be0
Progress on reasoning on true fallback color
OssianEPPlus Aug 12, 2026
1b81d79
Merge branch 'feature/DrawingRendererRefactor' of https://github.com/…
OssianEPPlus Aug 12, 2026
5c0dc63
Added check for applying tint. we do inverse
OssianEPPlus Aug 13, 2026
999ee21
A version that passes all test cases.Problem:Magic numbers
OssianEPPlus Aug 14, 2026
621dc5b
Started adding a system with less magic numbers
OssianEPPlus Aug 14, 2026
393fe18
Ensured directory is created for tests
OssianEPPlus Aug 17, 2026
0e83587
Fixes issue 2459 (#2461)
JanKallman Aug 17, 2026
9721baf
Fixed #2464 (#2467)
OssianEPPlus Aug 17, 2026
2d93289
Changed default shape shade to 15%
OssianEPPlus Aug 17, 2026
feaae2d
Fixed positioning of primary and secondary axis and axis titles when …
JanKallman Aug 18, 2026
dccbe65
Fixes more axis issues
JanKallman Aug 18, 2026
2396306
Fixes axis titles when deleted primary axis
JanKallman Aug 18, 2026
de58260
Fixed gradient.
JanKallman Aug 19, 2026
5c0090c
Fixed Tint/Shade transform calculation
JanKallman Aug 20, 2026
46a3a0e
#2456-Removed Finalizers from the cell store and the ExcelVmlDrawingC…
JanKallman Aug 20, 2026
e89ff1d
fixed issue (#2475)
AdrianEPPlus Aug 20, 2026
3fc7fe1
#2456-Removed finalizers on cell store classes. (#2477)
JanKallman Aug 20, 2026
f8c1a9f
EPPlus version 8.7.0
JanKallman Aug 20, 2026
ff25e79
Fixed edge-case fallbacks to use new fix
OssianEPPlus Aug 20, 2026
4a7bf9d
Fixed glow filter
JanKallman Aug 20, 2026
5a1aa7e
Implemented new fill fallbacks lotta stuff crashes
OssianEPPlus Aug 21, 2026
07a1415
Fixed null issue
OssianEPPlus Aug 21, 2026
a13d2ea
Fixes date axis label positioning
JanKallman Aug 21, 2026
9797369
Re-fixed smiley
OssianEPPlus Aug 21, 2026
c53cf73
Started on each chart element providing style info
OssianEPPlus Aug 21, 2026
05f2895
Merge branch 'feature/DrawingRendererRefactor' of https://github.com/…
OssianEPPlus Aug 21, 2026
2512f32
Merge branch 'develop8' into feature/DrawingRendererRefactor
JanKallman Aug 24, 2026
3a0df67
Merge branch 'develop9' into feature/DrawingRendererRefactor
JanKallman Aug 24, 2026
3c396de
Added new default chartDrawingObject
OssianEPPlus Aug 24, 2026
cafc59e
Fixed multiple bugs in new system removed some of old
OssianEPPlus Aug 24, 2026
f280686
Merge branch 'feature/DrawingRendererRefactor' of https://github.com/…
OssianEPPlus Aug 24, 2026
168b936
Fixed failing tests
JanKallman Aug 24, 2026
a45b79f
Merge branch 'feature/DrawingRendererRefactor' of https://github.com/…
OssianEPPlus Aug 24, 2026
55725e6
Fixed edge-case node-exists but is empty
OssianEPPlus Aug 24, 2026
c1e1249
Condenced fallbackTests and made assertive
OssianEPPlus Aug 24, 2026
eec7d57
Resolved bug For ExcelEdited
OssianEPPlus Aug 25, 2026
b5e1d4c
Ensured handling transparency/none
OssianEPPlus Aug 25, 2026
961c2b8
Asserted additional tests. Fixed fillStyle=0
OssianEPPlus Aug 25, 2026
1a16eaf
Started adding object defaults
OssianEPPlus Aug 25, 2026
3a04a3a
added missing file
OssianEPPlus Aug 25, 2026
75cc342
#2479 - Fix header/footer section parsing when &L is not first (#2482)
swmal Aug 26, 2026
bee3cb8
Implemented object defaults(initial)
OssianEPPlus Aug 26, 2026
1d92931
Resolved multiple ObjectDefaults reading errors
OssianEPPlus Aug 26, 2026
e8130c6
Fixed horizontal axis. Format number for vertical axis.
JanKallman Aug 26, 2026
073cec5
Fixed default gradient. Set userSpace to object
OssianEPPlus Aug 26, 2026
fca21b0
Merge branch 'feature/DrawingRendererRefactor' of https://github.com/…
OssianEPPlus Aug 26, 2026
03e908e
Merge
JanKallman Aug 27, 2026
b4b2c60
Re-applied user-space-units + fixed vertLines
OssianEPPlus Aug 27, 2026
89ce1db
Merge branch 'feature/DrawingRendererRefactor' of https://github.com/…
OssianEPPlus Aug 27, 2026
2d709bd
#2486 - Increased AutoFilterArrowWidthPixels from 15 to 19
Aug 28, 2026
34448c5
Merge pull request #2487 from EPPlusSoftware/bug/i2486
OssianEPPlus Aug 28, 2026
2600db1
Edge-case tempfix
OssianEPPlus Aug 28, 2026
aa5bc8f
Added comment removed leftover line
OssianEPPlus Aug 28, 2026
02ea748
Applied defaults except for dataPts and upDownBars
OssianEPPlus Aug 28, 2026
0857431
Added moved file
OssianEPPlus Aug 28, 2026
dce1620
Fixes for html export
JanKallman Aug 28, 2026
5bf4d24
Merge branch 'feature/DrawingRendererRefactor' of https://github.com/…
JanKallman Aug 28, 2026
e64e6fe
Fixed gradientFill for pieslices
OssianEPPlus Aug 28, 2026
8a985fd
Merge branch 'feature/DrawingRendererRefactor' of https://github.com/…
JanKallman Aug 28, 2026
fa4fc55
Fix for #2488 BorderStyle.None now writes correctly (#2489)
OssianEPPlus Sep 1, 2026
230f864
Fixed html export for drawings-positioning etc
JanKallman Sep 1, 2026
82a9b8c
Fixed default position right
OssianEPPlus Sep 1, 2026
b5ee104
Adjusted default borderwidth/series icon for datalabels
OssianEPPlus Sep 1, 2026
7efb656
Applied Datalabel fallback fill
OssianEPPlus Sep 1, 2026
6da6763
Merge branch 'feature/DrawingRendererRefactor' of https://github.com/…
OssianEPPlus Sep 1, 2026
2327b97
Fixed minor tickmarks on date axis
JanKallman Sep 1, 2026
dbec5d2
Bar chart fix using global position (for now)
OssianEPPlus Sep 1, 2026
45f3de9
Fixed border-width failing unit tests
OssianEPPlus Sep 1, 2026
91b6fff
Same fix for bars as for columns
OssianEPPlus Sep 1, 2026
522a860
Merge branch 'feature/DrawingRendererRefactor' of https://github.com/…
OssianEPPlus Sep 1, 2026
d002d8a
Fixed test
JanKallman Sep 2, 2026
a07397e
Merge branch 'feature/DrawingRendererRefactor' of https://github.com/…
JanKallman Sep 2, 2026
36e89dd
Merge branch 'develop8' into feature/DrawingRendererRefactor
JanKallman Sep 2, 2026
64827b8
Fixed failing test
OssianEPPlus Sep 2, 2026
824045b
Merge branch 'feature/DrawingRendererRefactor' of https://github.com/…
OssianEPPlus Sep 2, 2026
c7b8598
Fixed style defaults and verified with test adjustment
OssianEPPlus Sep 2, 2026
b1e1056
Fixed issues from failing tests
JanKallman Sep 2, 2026
662377a
Merge branch 'feature/DrawingRendererRefactor' of https://github.com/…
JanKallman Sep 2, 2026
fc265be
Merge develop9
JanKallman Sep 2, 2026
67e75a9
Fixed datalabels for point explosions
OssianEPPlus Sep 2, 2026
7101db3
Fixed faulty adjustment of BestFit
OssianEPPlus Sep 2, 2026
bd8cb09
Fixed bestfit issue
OssianEPPlus Sep 2, 2026
a47b649
Merge branch 'feature/DrawingRendererRefactor' of https://github.com/…
OssianEPPlus Sep 2, 2026
bdae92d
Fixed some pdf issues with blazor
JanKallman Sep 3, 2026
597ed56
Merge branch 'feature/DrawingRendererRefactor' of https://github.com/…
JanKallman Sep 3, 2026
7e1d804
Fixed white borders on data points
OssianEPPlus Sep 3, 2026
21455ca
Merge branch 'feature/DrawingRendererRefactor' of https://github.com/…
OssianEPPlus Sep 3, 2026
dbdd631
Fixed bar/column charts with date axis and negative values
JanKallman Sep 3, 2026
f6f908d
Merge branch 'feature/DrawingRendererRefactor' of https://github.com/…
JanKallman Sep 3, 2026
6ea3ad6
Fixed transparent blazor bars
OssianEPPlus Sep 3, 2026
01ae051
Adjusted rounding var for BestFit pieCharts
OssianEPPlus Sep 3, 2026
4e3989e
Fixes axis positioning with negative min values
JanKallman Sep 3, 2026
330d785
Add svg wrap tests
OssianEPPlus Sep 3, 2026
053e472
Merge branch 'feature/DrawingRendererRefactor' of https://github.com/…
OssianEPPlus Sep 3, 2026
2c19992
Actually added tests
OssianEPPlus Sep 3, 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
1 change: 0 additions & 1 deletion src/Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="BenchmarkDotNet" Version="0.15.8" />
<PackageVersion Include="EPPlus" Version="8.6.3" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="8.0.1" />
<PackageVersion Include="Microsoft.IO.RecyclableMemoryStream" Version="3.0.1" />
<PackageVersion Include="MSTest" Version="3.10.4" />
Expand Down
1 change: 1 addition & 0 deletions src/EPPlus.Compression/EPPlus.Compression.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@
<RootNamespace>OfficeOpenXml.Packaging.Ionic</RootNamespace>
<SignAssembly>true</SignAssembly>
<AssemblyOriginatorKeyFile>EPPlus.Compression.snk</AssemblyOriginatorKeyFile>
<IsPackable>false</IsPackable>
</PropertyGroup>
</Project>
2 changes: 1 addition & 1 deletion src/EPPlus.DrawingRenderer.Tests/Chart/BarChartTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public void DatalabelBarCharts()
{
var ws = p.Workbook.Worksheets[0];
var drawings = ws.Drawings;
var ix = 1;
var ix = 0;

for (int i = ix; i < drawings.Count; i++)
{
Expand Down
618 changes: 404 additions & 214 deletions src/EPPlus.DrawingRenderer.Tests/Chart/ChartStyleFallbackTest.cs

Large diffs are not rendered by default.

43 changes: 43 additions & 0 deletions src/EPPlus.DrawingRenderer.Tests/Chart/ColumnChartTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -53,5 +53,48 @@ public void GenerateSvgForColumnCharts2()
}
}
}
[TestMethod]
public void GenerateColumnChartFromBlazorSample()
{
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
using (var p = OpenTemplatePackage("BlazorSample1-Column.xlsx"))
{
var ws = p.Workbook.Worksheets[1];

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

var ix = 0;
foreach (ExcelChart c in ws.Drawings)
{
var svg = c.ToSvg();
SaveTextFileToWorkbook($"svg\\BlazorSample_Column_sheet2_{ix++}.svg", svg);
}
}
}
[TestMethod]
public void GenerateBarChartFromBlazorSample()
{
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
using (var p = OpenTemplatePackage("BlazorSample1-BarChart.xlsx"))
{
var ws = p.Workbook.Worksheets[1];

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

var ix = 0;
foreach (ExcelChart c in ws.Drawings)
{
var svg = c.ToSvg();
SaveTextFileToWorkbook($"svg\\BlazorSample_Bar_sheet2_{ix++}.svg", svg);
}
}
}

}
}
87 changes: 87 additions & 0 deletions src/EPPlus.DrawingRenderer.Tests/Chart/LineChartToSvgTests.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
using OfficeOpenXml;
using OfficeOpenXml.Drawing.Chart;
using OfficeOpenXml.Drawing.Chart.Style;
using OfficeOpenXml.Export.HtmlExport;
using OfficeOpenXml.Style;
using OfficeOpenXml.Table;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
Expand Down Expand Up @@ -322,6 +327,88 @@ public void GenerateLineChartWithDropLine()
}
}
}
[TestMethod]
public void GenerateBlazorSample1()
{
ExcelPackage.License.SetNonCommercialOrganization("EPPlus Project");
using (var p = OpenTemplatePackage("BlazorSample1.xlsx"))
{
var ws = p.Workbook.Worksheets[1];

//var ix = 1;
//var c = ws.Drawings[ix];
//var svg = c.ToSvg();
//SaveTextFileToWorkbook($"svg\\5.3-SampleLines{ix}.svg", svg);

for (int i = 0; i < ws.Drawings.Count; i++)
{
var c = ws.Drawings[i];
var svg = c.ToSvg();
SaveTextFileToWorkbook($"svg\\BlazorSample1{i}.svg", svg);
}
}
}
[TestMethod]
public async Task HtmlExportWithLineChart()
{
using (var package = new ExcelPackage())
{
var style = TableStyles.Dark3;
var sheet = package.Workbook.Worksheets.Add("Html export sample 8");
var csvFileInfo = new FileInfo(Path.Combine(_dataPath, $"currencies2011weekly.csv"));
if (csvFileInfo.Exists == false) return;
var format = new ExcelTextFormat
{
Delimiter = ';',
Culture = CultureInfo.InvariantCulture,
DataTypes = new eDataTypes[] { eDataTypes.DateTime, eDataTypes.Number, eDataTypes.Number, eDataTypes.Number, eDataTypes.Number }
};
var tableRange = sheet.Cells["A15"].LoadFromText(csvFileInfo, format, style, true);

sheet.Cells["B1:E1"].Style.HorizontalAlignment = ExcelHorizontalAlignment.Right;
sheet.Cells[tableRange.Start.Row, 1, tableRange.End.Row, 1].Style.Numberformat.Format = "yyyy-MM-dd";
sheet.Cells[tableRange.Start.Row, 2, tableRange.End.Row, 5].Style.Numberformat.Format = "#,##0.0000";
tableRange.AutoFitColumns();

var table = sheet.Tables.GetFromRange(tableRange);
table.ShowFirstColumn = true;
var chart = sheet.Drawings.AddLineChart("LineChart1", eLineChartType.Line);

var serie1 = chart.Series.Add(tableRange.TakeColumnsBetween(1,1).SkipRows(1), tableRange.TakeColumns(1).SkipRows(1));
serie1.HeaderAddress = sheet.Cells["B15"];

var serie2 = chart.Series.Add(tableRange.TakeColumnsBetween(2, 1).SkipRows(1), tableRange.TakeColumns(1).SkipRows(1));
serie2.HeaderAddress = sheet.Cells["C15"];

var serie3 = chart.Series.Add(tableRange.TakeColumnsBetween(3, 1).SkipRows(1), tableRange.TakeColumns(1).SkipRows(1));
serie3.HeaderAddress = sheet.Cells["D15"];

chart.SetPosition(0, 0);
chart.To.Row = 14;
chart.To.Column = 10;
chart.StyleManager.SetChartStyle(ePresetChartStyle.LineChartStyle5);

var exporter = sheet.Cells.CreateHtmlExporter();
var settings = exporter.Settings;
settings.Drawings.Include = eDrawingInclude.Include;
settings.Culture = CultureInfo.InvariantCulture;
settings.SetRowHeight = true;
settings.SetColumnWidth = true;
settings.TableId = "currency-table";
settings.AdditionalTableClassNames.Add("table");
settings.AdditionalTableClassNames.Add("table-sm");
settings.AdditionalTableClassNames.Add("table-borderless");
settings.Drawings.Position = eDrawingPosition.Absolute;
SaveWorkbook("HtmlExportWithLineChart.xlsx", package);
// export css and html
//var css = exporter.GetCssString();
//var html = exporter.GetHtmlString();
var html = await exporter.GetSinglePageAsync();

SaveSvg("HtmlExportWithLineChart.html", html);
}

}
//2.4-CreateAFileSystemReport.xlsx
//3.3-FxReportFromDatabase.xlsx
}
Expand Down
75 changes: 75 additions & 0 deletions src/EPPlus.DrawingRenderer.Tests/Shape/ShapeWrappingTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
using OfficeOpenXml;
using OfficeOpenXml.Drawing;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EPPlus.DrawingRenderer.Tests.Shape
{
[TestClass]
public class ShapeWrappingTests : TestBase
{
[TestMethod]
public void WrapEveryLetter()
{
using(var p = OpenPackage("WrapEveryLetterSvg.xlsx",true))
{
var ws = p.Workbook.Worksheets.Add("wrapShapes");

var txtBox = ws.Drawings.AddTextbox("txtBox1", "MY WORLD");
txtBox.As.Shape.SetSize(30, 150);

var svg = txtBox.ToSvg();
File.WriteAllText(GetOutputFile("svg\\", "WrapEveryLetter.svg").FullName, svg);
SaveAndCleanup(p);
}
}

[TestMethod]
public void WrapAndColor()
{
using (var p = OpenPackage("WrapInRect.xlsx", true))
{
var ws = p.Workbook.Worksheets.Add("wrap");

var _currentShape = ws.Drawings.AddShape("MyShape", OfficeOpenXml.Drawing.eShapeStyle.Rect);
_currentShape.SetSize(36, 200);

_currentShape.Font.Color = System.Drawing.Color.Goldenrod;
_currentShape.TextBody.LeftInsert = 0;
_currentShape.TextBody.RightInsert = 0;
_currentShape.TextBody.TopInsert = 0;
_currentShape.TextBody.BottomInsert = 0;

var rt1 = _currentShape.RichText.Add("M", true);
var rt2 = _currentShape.RichText.Add("Y ", false);
var rt3 = _currentShape.RichText.Add("W", false);
var rt4 = _currentShape.RichText.Add("O", false);
var rt5 = _currentShape.RichText.Add("R", false);
var rt6 = _currentShape.RichText.Add("L", false);
var rt7 = _currentShape.RichText.Add("D", false);
_currentShape.RichText.Add("MY WORLD", true);

var startColor = KnownColor.Plum;

_currentShape.RichText.Add("Default world", true);

foreach (var item in _currentShape.RichText)
{
item.Color = System.Drawing.Color.FromKnownColor(startColor);
startColor += 1;
}

_currentShape.TextBody.Anchor = eTextAnchoringType.Top;

var svg = _currentShape.ToSvg();
File.WriteAllText(GetOutputFile("svg\\", "WrapAndColor.svg").FullName, svg);

SaveAndCleanup(p);
}
}
}
}
1 change: 1 addition & 0 deletions src/EPPlus.DrawingRenderer.Tests/TestBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ private class GeoData
protected static string _testInputPathOptional = @"c:\epplusTest\workbooks\"; //Team shared workbooks for tests
protected static string _testInputLocalPathOptional = @"c:\epplusTest\workbooks\"; //Local workboks for tests
protected static string _imagePath = @"c:\epplusTest\images\";
protected static string _dataPath = @"c:\epplusTest\data\";
/// <summary>
///Gets or sets the test context which provides
///information about and functionality for the current test run.
Expand Down
22 changes: 11 additions & 11 deletions src/EPPlus.DrawingRenderer.Tests/TextRenderTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
// var c = System.Drawing.Color.FromName(color);
// if (c.IsEmpty)
// {
// var sc = Enum.Parse<eSchemeColor>(color);
// var sc = (eSchemeColor)Enum.Parse(typeof(eSchemeColor), color);
// fill.SolidFill.Color.SetSchemeColor(sc);
// }
// else
Expand All @@ -49,7 +49,7 @@
// }
// catch
// {
// var sc = Enum.Parse<eSchemeColor>(color);
// var sc = (eSchemeColor)Enum.Parse(typeof(eSchemeColor), color);
// fill.SolidFill.Color.SetSchemeColor(sc);
// }
// }
Expand All @@ -76,13 +76,13 @@
// // fontSizes.Add(runFont.Size);
// // }


// // return new TextFragmentCollectionSimple(fonts, runContents);
// //}

// //List<TextLineSimple> GetWrappedText(ExcelDrawingTextRunCollection runs, TextFragmentCollectionSimple fragments)
// //{

// // List<MeasurementFont> fonts = new List<MeasurementFont>();

// // for (int i = 0; i < runs.Count(); i++)
Expand Down Expand Up @@ -146,7 +146,7 @@
// Style = MeasurementFontStyles.Regular
// };

// List<MeasurementFont> fonts = new() { /*font1,*/ font2, font3, font4, font5, font6};
// List<MeasurementFont> fonts = new() { /*font1,*/ font2, font3, font4, font5, font6 };

// var maxSizePoints = Math.Round(300d, 0, MidpointRounding.AwayFromZero).PixelToPoint();
// var ttMeasurer = OpenTypeFonts.GetTextLayoutEngineForFont(font2);
Expand Down Expand Up @@ -224,14 +224,14 @@

// var txtRuns2 = tbItem.Paragraphs[1].Runs;

// Assert.AreEqual(53.20963541666667d, txtRuns2[0].Bounds.Width.PointToPixel(),0.2);
// Assert.AreEqual(53.20963541666667d, txtRuns2[0].Bounds.Width.PointToPixel(), 0.2);
// var currentLineWidth = txtRuns2[0].Bounds.Width.PointToPixel();

// Assert.AreEqual(currentLineWidth, txtRuns2[1].Bounds.Left.PointToPixel(),0.2);
// Assert.AreEqual(69.55924479166667d, txtRuns2[1].Bounds.Width.PointToPixel(),0.2);
// Assert.AreEqual(currentLineWidth, txtRuns2[1].Bounds.Left.PointToPixel(), 0.2);
// Assert.AreEqual(69.55924479166667d, txtRuns2[1].Bounds.Width.PointToPixel(), 0.2);
// currentLineWidth += txtRuns2[1].Bounds.Width.PointToPixel();

// Assert.AreEqual(currentLineWidth, txtRuns2[2].Bounds.Left.PointToPixel(),0.0001);
// Assert.AreEqual(currentLineWidth, txtRuns2[2].Bounds.Left.PointToPixel(), 0.0001);
// Assert.AreEqual(49.89388020833334, txtRuns2[2].Bounds.Width.PointToPixel(), 0.0001);
// currentLineWidth += txtRuns2[2].Bounds.Width.PointToPixel();

Expand Down Expand Up @@ -328,7 +328,7 @@


// //Appears off by 1-2 px bc of border width
// Assert.AreEqual(190d, tbItem.Bounds.GlobalTop.PointToPixel() , 1.0);
// Assert.AreEqual(190d, tbItem.Bounds.GlobalTop.PointToPixel(), 1.0);
// }


Expand Down Expand Up @@ -379,7 +379,7 @@

// //var trItem = new SvgTextRunItem(svgShape, lastpara.Bounds, font, "MyText");
// //lastpara.Runs.Add(trItem);
// lastpara.AddOwnText(new TextFragment() {Text = "my new text", Font = font });
// lastpara.AddOwnText(new TextFragment() { Text = "my new text", Font = font });
// svgShape.Render(sb);

// var str = sb.ToString();
Expand Down
1 change: 1 addition & 0 deletions src/EPPlus.DrawingRenderer/EPPlus.DrawingRenderer.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
<LangVersion>latest</LangVersion>
<SignAssembly>True</SignAssembly>
<AssemblyOriginatorKeyFile>EPPlus.DrawingRenderer.snk</AssemblyOriginatorKeyFile>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<Compile Remove="RenderItems\Shared\GroupItem.cs" />
Expand Down
38 changes: 38 additions & 0 deletions src/EPPlus.DrawingRenderer/Svg/Core/SvgShapeRenderer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -622,8 +622,46 @@ private string GetXy(RenderItem item, UserSpaceSettings userSpace, double? angle
double x1 = cx - halfX, y1 = cy - halfY;
double x2 = cx + halfX, y2 = cy + halfY;

if(item.DefId == "xGridLine")
{
//If global, has to stretch the whole length.
//This case is special because it stretches in the same direction as the attempted gradient
x1 = item.Bounds.Left;
x2 = w - x1;
}

return $" x1=\"{(x1).PointToPixelString("0.00")}\" x2=\"{(x2).PointToPixelString("0.00")}\" y1=\"{y1.PointToPixelString("0.00")}\" y2=\"{y2.PointToPixelString("0.00")}\"";
}
else if (angle.HasValue && angle != 0)
{
var x1 = 0D;
var x2 = 0D;
var y1 = 0D;
var y2 = 0D;
angle %= 360;
if (angle <= 90)
{
x2 = 1D - Math.Sin(MathHelper.Radians(angle.Value));
y2 = Math.Sin(MathHelper.Radians(angle.Value));
}
else if (angle <= 180)
{
y2 = Math.Sin(MathHelper.Radians(angle.Value));
x1 = 1D - Math.Sin(MathHelper.Radians(angle.Value));
}
else if (angle <= 270)
{
y1 = Math.Sin(MathHelper.Radians(angle.Value - 180));
x1 = 1D - Math.Sin(MathHelper.Radians(angle.Value - 180));
}
else
{
y1 = Math.Sin(MathHelper.Radians(angle.Value - 180));
x2 = 1D - Math.Sin(MathHelper.Radians(angle.Value - 180));
}

return $" x1=\"{(x1).ToString("0.00%", CultureInfo.InvariantCulture)}\" x2=\"{(x2).ToString("0.00%", CultureInfo.InvariantCulture)}\" y1=\"{y1.ToString("0.00%", CultureInfo.InvariantCulture)}\" y2=\"{y2.ToString("0.00%", CultureInfo.InvariantCulture)}\"";
}
return "";
}

Expand Down
Loading
Loading