Skip to content

Commit 205f78f

Browse files
committed
Merge branch 'develop9' into feature/chart_to_svg
# Conflicts: # src/EPPlus.Export.ImageRenderer/RenderItems/Shared/ParagraphItem.cs # src/EPPlus.Export.ImageRenderer/RenderItems/Shared/TextRunItem.cs # src/EPPlus.Export.ImageRenderer/RenderItems/SvgRenderRectItem.cs # src/EPPlus.Export.ImageRenderer/RenderItems/TextRunRenderItem.cs # src/EPPlus.Export.ImageRenderer/Svg/SvgChart.cs # src/EPPlus.Export.ImageRenderer/Svg/SvgChartAxis.cs # src/EPPlus.Export.ImageRenderer/Svg/SvgChartTitle.cs # src/EPPlus.Export.ImageRenderer/Svg/SvgShape.cs # src/EPPlus.Fonts.OpenType/FontCache/OpenTypeFontCache.cs # src/EPPlus.Fonts.OpenType/OpenTypeFonts.cs # src/EPPlus.Fonts.OpenType/TrueTypeMeasurer/FontMeasurerTrueType.cs
2 parents 4e7d7e4 + 16f00e8 commit 205f78f

193 files changed

Lines changed: 139382 additions & 2247 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.

src/EPPlus.Export.ImageRenderer.Test/TestTextContainer.cs

Lines changed: 11 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using EPPlus.Graphics;
99
using EPPlus.Export.ImageRenderer.RenderItems.Shared;
1010
using EPPlus.Fonts.OpenType;
11+
using EPPlus.Export.ImageRenderer.RenderItems.SvgItem;
1112

1213
namespace EPPlus.Export.ImageRenderer.Tests
1314
{
@@ -22,11 +23,11 @@ public void TestDynamicSizeSingleLine()
2223
var expectedHeight = 18d;
2324

2425
var mf = new MeasurementFont() { FontFamily = "Aptos", Size = 11, Style = MeasurementFontStyles.Regular };
25-
26+
2627
var container = new TextContainer(content, mf, true);
2728

28-
Assert.AreEqual(expectedWidth, Math.Round(container.Width,0));
29-
Assert.AreEqual(expectedHeight, Math.Round(container.Height,0));
29+
Assert.AreEqual(expectedWidth, Math.Round(container.Width, 0));
30+
Assert.AreEqual(expectedHeight, Math.Round(container.Height, 0));
3031
}
3132

3233
[TestMethod]
@@ -111,65 +112,17 @@ public void EnsureTextBodyAddsRunsCorrectly()
111112
shapeRect.Height = 10;
112113

113114
FontMeasurerTrueType measurer = new FontMeasurerTrueType(12, "Aptos Narrow", FontSubFamily.Regular);
114-
var body = new TextBody(measurer, shapeRect, true);
115+
var body = new SvgTextBodyItem(shapeRect);
115116

116-
body.transform.Name = "TxtBody";
117+
body.Bounds.transform.Name = "TxtBody";
117118

118-
body.AddText("A new Paragraph");
119-
body.AddText("Second paragraph");
119+
body.AddText("A new Paragraph", measurer);
120+
body.AddText("Second paragraph", measurer);
120121

121-
Assert.AreEqual(2, body.transform.ChildObjects.Count);
122-
Assert.AreEqual(body.transform.ChildObjects[0], body.Runs[0].transform);
122+
Assert.AreEqual(2, body.Paragraphs[0].Bounds.transform.ChildObjects.Count);
123+
Assert.AreEqual(body.Bounds.transform.ChildObjects[0], body.Paragraphs[0].Bounds.transform);
123124

124-
Assert.AreEqual(shapeRect.transform, body.transform.Parent);
125+
Assert.AreEqual(shapeRect.transform, body.Bounds.transform.Parent);
125126
}
126-
127-
//[TestMethod]
128-
//public void TextContainerGeneric()
129-
//{
130-
// //Options
131-
132-
// //1: One text-container per "shape/textbox"
133-
// //Pros: Resizes based on strings in a singular place, less "New" statements, Less broken down
134-
// //Cons: Individual fonts etc. get tricky, will still need to be broken down but more obfuscated,
135-
136-
// //2: Text-Container down to fragment/run level
137-
// //Pros: All positioning, fonts, etc. Come in by default. Each fragment knows where it is and what it is and how big it is, need only ever measure each fragment once
138-
// //Cons: Text-wrapping, resizing the shape, etc gets trickier, More new statements means larger overhead and less clear overview
139-
140-
// //3: Text-container down to Paragraph level
141-
// //Pros: All paragraph properties; indentation, linespacing, alignment etc gets well contained and clear,
142-
// //Cons:
143-
144-
// //I'm thinking of this all wrong.
145-
// //Either way we will need a transform for each object in a hierarchy.
146-
// //Lowest common denominator has to become some kind of baseclass
147-
// //Build from smallest (fragment) to Largest. All of the same base-class (Could be as simple as just containers for Transform for starters
148-
// //Then go upward. (Glyph?) -> Fragment/Run -> Run -> Paragraph -> Container
149-
// //Lowest needs: Rect. (Bounding box) that can also hold a string.
150-
// //Next: Same but basic font data
151-
// //Next: Full rich-text?
152-
153-
// StringBuilder sb = new StringBuilder();
154-
155-
// TextContainerBase Fragment1 = new TextContainerBase(true);
156-
157-
// TextContainerBase Fragment2 = new TextContainerBase();
158-
159-
// TextContainerBase Fragment3 = new TextContainerBase();
160-
// ////Test positioning and re-sizing
161-
// //TextContainer shapeTextBox = new TextContainer();
162-
163-
// //shapeTextBox.transform.Position = new Graphics.Math.Vector2(5, 10);
164-
165-
166-
// //TextContainer paragraph1Container = new TextContainer();
167-
168-
// //TextContainer para2 = new TextContainer();
169-
170-
// //TextContainer para3 = new TextContainer();
171-
172-
// //TextContainer para4 = new TextContainer();
173-
//}
174127
}
175128
}

src/EPPlus.Export.ImageRenderer/DrawingBase.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,28 @@ Date Author Change
1313

1414
using EPPlus.Export.ImageRenderer;
1515
using EPPlusImageRenderer.RenderItems;
16+
using OfficeOpenXml;
1617
using OfficeOpenXml.Drawing;
18+
using OfficeOpenXml.Drawing.Theme;
1719
using OfficeOpenXml.Interfaces.Drawing.Text;
1820
using System.Collections.Generic;
1921
using System.Text;
2022

2123
namespace EPPlusImageRenderer
2224
{
23-
internal abstract class DrawingBase
25+
internal abstract class DrawingBase : RenderItem
2426
{
25-
internal DrawingBase(ExcelDrawing drawing)
27+
protected ExcelWorkbook _wb;
28+
29+
internal DrawingBase(ExcelDrawing drawing) : base(drawing)
2630
{
2731
drawing.GetSizeInPixels(out int width, out int height);
2832
Drawing = drawing;
2933
Size = new DrawingSize(width, height);
3034
TextMeasurer = drawing._drawings._package.Settings.TextSettings.PrimaryTextMeasurer;
35+
36+
_wb = drawing._drawings.Worksheet.Workbook;
37+
_theme = _wb.ThemeManager.GetOrCreateTheme();
3138
}
3239
public ExcelDrawing Drawing { get; }
3340
internal ITextMeasurer TextMeasurer { get; }

src/EPPlus.Export.ImageRenderer/DrawingShape.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,23 @@ Date Author Change
1111
27/11/2025 EPPlus Software AB EPPlus 9
1212
*************************************************************************************************/
1313

14+
using EPPlus.Export.ImageRenderer.RenderItems.Shared;
1415
using EPPlusImageRenderer.RenderItems;
16+
using OfficeOpenXml;
1517
using OfficeOpenXml.Drawing;
18+
using OfficeOpenXml.Drawing.Theme;
1619
using System;
1720
using System.Collections.Generic;
1821

1922
namespace EPPlusImageRenderer
2023
{
21-
internal abstract class DrawingShape : DrawingBase
24+
internal abstract class DrawingShape : DrawingBaseItem
2225
{
2326
protected ExcelShape _shape;
2427
protected DrawingShape(ExcelShape shape) : base(shape)
2528
{
29+
var style = shape.Style;
30+
2631
_shape = shape;
2732
}
2833
protected static void AddCmd(SvgRenderPathItem pi, DrawingPath path, List<double> coordinates, ref PathCommands cmd, PathsBase pp, PathsBase p, PathCommandType commandType)

0 commit comments

Comments
 (0)