Skip to content

Commit ed6430c

Browse files
authored
Merge pull request #2462 from EPPlusSoftware/fix/moretable
Fix/moretable
2 parents 7ff09ab + 6e50063 commit ed6430c

4 files changed

Lines changed: 184 additions & 306 deletions

File tree

src/EPPlus.Export.Pdf/ExcelPdf.cs

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -137,11 +137,10 @@ private PdfCatalog AddCatalog(int pagesObjectNumber)
137137
private void AddContent(Transform pageLayout, PdfPage page)
138138
{
139139
var cells = pageLayout.ChildObjects.Where(t =>
140-
(t is PdfCellLayout || t is PdfCellContentLayout || t is PdfCellBorderLayout) &&
141-
!(t is PdfCellLayout cc && (cc.IsHeading || cc.IsPrintTitle)) &&
142-
!(t is PdfCellContentLayout ccl && (ccl.IsHeaderFooter || ccl.IsHeading || ccl.IsPrintTitle)) &&
143-
!(t is PdfCellBorderLayout cbl && cbl.IsPrintTitle)).GroupBy(t => t.Name);
144-
140+
(t is PdfCellLayout || t is PdfCellContentLayout || t is PdfCellBorderLayout) &&
141+
!(t is PdfCellLayout cc && (cc.IsHeading || cc.IsPrintTitle)) &&
142+
!(t is PdfCellContentLayout ccl && (ccl.IsHeaderFooter || ccl.IsHeading || ccl.IsPrintTitle)) &&
143+
!(t is PdfCellBorderLayout cbl && cbl.IsPrintTitle)).ToList();
145144

146145
var headerFooterLayouts = pageLayout.ChildObjects.OfType<PdfCellContentLayout>().Where(t => t.IsHeaderFooter);
147146
var headingLayouts = pageLayout.ChildObjects.Where(t => (t is PdfCellLayout cl && cl.IsHeading) || (t is PdfCellContentLayout ccl && ccl.IsHeading));
@@ -155,24 +154,20 @@ private void AddContent(Transform pageLayout, PdfPage page)
155154
{
156155
contentStream.AddInnerGridLines(pageLayout);
157156
}
158-
foreach (var cell in cells)
157+
foreach (PdfCellLayout fill in cells.OfType<PdfCellLayout>())
159158
{
160-
foreach (var cellPart in cell)
161-
{
162-
contentStream.AddCommand($"% CELL : {cellPart.Name}");
163-
switch (cellPart)
164-
{
165-
case PdfCellLayout layout:
166-
contentStream.AddCellLayout(layout, GetPatternLabel(layout));
167-
break;
168-
case PdfCellContentLayout contentLayout:
169-
contentStream.AddCellContentLayout(contentLayout, _dictionaries, _pageSettings);
170-
break;
171-
case PdfCellBorderLayout borderLayout:
172-
contentStream.AddBorderLayout(borderLayout);
173-
break;
174-
}
175-
}
159+
contentStream.AddCommand($"% CELL FILL : {fill.Name}");
160+
contentStream.AddCellLayout(fill, GetPatternLabel(fill));
161+
}
162+
foreach (PdfCellContentLayout content in cells.OfType<PdfCellContentLayout>())
163+
{
164+
contentStream.AddCommand($"% CELL TEXT : {content.Name}");
165+
contentStream.AddCellContentLayout(content, _dictionaries, _pageSettings);
166+
}
167+
foreach (PdfCellBorderLayout border in cells.OfType<PdfCellBorderLayout>())
168+
{
169+
contentStream.AddCommand($"% CELL BORDER : {border.Name}");
170+
contentStream.AddBorderLayout(border);
176171
}
177172
//Close the clipping rectangle.
178173
contentStream.AddCommand("Q");

src/EPPlus/Export/PdfExport/Data/PdfCellStyle.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,10 @@ internal class PdfCellStyle
4848
internal bool SuppressBottom { get; set; }
4949
internal bool SuppressLeft { get; set; }
5050
internal bool SuppressRight { get; set; }
51-
internal bool dxfTopIsWholeTable { get; set; }
52-
internal bool dxfBottomIsWholeTable { get; set; }
53-
internal bool dxfLeftIsWholeTable { get; set; }
54-
internal bool dxfRightIsWholeTable { get; set; }
51+
internal int dxfTopElementOrder;
52+
internal int dxfBottomElementOrder;
53+
internal int dxfLeftElementOrder;
54+
internal int dxfRightElementOrder;
5555

5656
//Fonts
5757
internal ExcelFont xfFont { get; set; }

src/EPPlus/Export/PdfExport/Layout/PdfLayout.cs

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -606,28 +606,29 @@ private static void AddPrintTitleCells(PdfPageSettings pageSettings, PdfDictiona
606606

607607
private static void SetBorderStyle(PdfCellStyle style, PdfCellBorderLayout border)
608608
{
609-
//var topStyle = style.xfTop.Style == ExcelBorderStyle.None ? ((style.dxfTop != null && style.dxfTop.HasValue) ? (ExcelBorderStyle)style.dxfTop.Style : ExcelBorderStyle.None) : style.xfTop.Style;
610-
var topStyle = style.SuppressTop ? ExcelBorderStyle.None : (style.xfTop.Style == ExcelBorderStyle.None ? ((style.dxfTop != null && style.dxfTop.HasValue) ? (ExcelBorderStyle)style.dxfTop.Style : ExcelBorderStyle.None) : style.xfTop.Style);
611-
var topColor = style.dxfTop != null ? PdfColor.SetColorFromHex(style.dxfTop.Color.LookupColor(style.dxfTop)) : PdfColor.SetColorFromHex(style.xfTop.Color.LookupColor(style.xfTop));
609+
var topStyle = style.xfTop.Style == ExcelBorderStyle.None ? ((style.dxfTop != null && style.dxfTop.HasValue) ? (ExcelBorderStyle)style.dxfTop.Style : ExcelBorderStyle.None) : style.xfTop.Style;
610+
var topColor = (style.xfTop.Style == ExcelBorderStyle.None && style.dxfTop != null) ? PdfColor.SetColorFromHex(style.dxfTop.Color.LookupColor(style.dxfTop)) : PdfColor.SetColorFromHex(style.xfTop.Color.LookupColor(style.xfTop));
612611

613-
//var bottomStyle = style.xfBottom.Style == ExcelBorderStyle.None ? ((style.dxfBottom != null && style.dxfBottom.HasValue) ? (ExcelBorderStyle)style.dxfBottom.Style : ExcelBorderStyle.None) : style.xfBottom.Style;
614-
var bottomStyle = style.SuppressBottom ? ExcelBorderStyle.None : (style.xfBottom.Style == ExcelBorderStyle.None ? ((style.dxfBottom != null && style.dxfBottom.HasValue) ? (ExcelBorderStyle)style.dxfBottom.Style : ExcelBorderStyle.None) : style.xfBottom.Style);
615-
var bottomColor = style.dxfBottom != null ? PdfColor.SetColorFromHex(style.dxfBottom.Color.LookupColor(style.dxfBottom)) : PdfColor.SetColorFromHex(style.xfBottom.Color.LookupColor(style.xfBottom));
612+
var bottomStyle = style.xfBottom.Style == ExcelBorderStyle.None ? ((style.dxfBottom != null && style.dxfBottom.HasValue) ? (ExcelBorderStyle)style.dxfBottom.Style : ExcelBorderStyle.None) : style.xfBottom.Style;
613+
var bottomColor = (style.xfBottom.Style == ExcelBorderStyle.None && style.dxfBottom != null) ? PdfColor.SetColorFromHex(style.dxfBottom.Color.LookupColor(style.dxfBottom)) : PdfColor.SetColorFromHex(style.xfBottom.Color.LookupColor(style.xfBottom));
616614

617-
//var leftStyle = style.xfLeft.Style == ExcelBorderStyle.None ? ((style.dxfLeft != null && style.dxfLeft.HasValue) ? (ExcelBorderStyle)style.dxfLeft.Style : ExcelBorderStyle.None) : style.xfLeft.Style;
618-
var leftStyle = style.SuppressLeft ? ExcelBorderStyle.None : (style.xfLeft.Style == ExcelBorderStyle.None ? ((style.dxfLeft != null && style.dxfLeft.HasValue) ? (ExcelBorderStyle)style.dxfLeft.Style : ExcelBorderStyle.None) : style.xfLeft.Style);
619-
var leftColor = style.dxfLeft != null ? PdfColor.SetColorFromHex(style.dxfLeft.Color.LookupColor(style.dxfLeft)) : PdfColor.SetColorFromHex(style.xfLeft.Color.LookupColor(style.xfLeft));
615+
var leftStyle = style.xfLeft.Style == ExcelBorderStyle.None ? ((style.dxfLeft != null && style.dxfLeft.HasValue) ? (ExcelBorderStyle)style.dxfLeft.Style : ExcelBorderStyle.None) : style.xfLeft.Style;
616+
var leftColor = (style.xfLeft.Style == ExcelBorderStyle.None && style.dxfLeft != null) ? PdfColor.SetColorFromHex(style.dxfLeft.Color.LookupColor(style.dxfLeft)) : PdfColor.SetColorFromHex(style.xfLeft.Color.LookupColor(style.xfLeft));
620617

621-
//var rightStyle = style.xfRight.Style == ExcelBorderStyle.None ? ((style.dxfRight != null && style.dxfRight.HasValue) ? (ExcelBorderStyle)style.dxfRight.Style : ExcelBorderStyle.None) : style.xfRight.Style;
622-
var rightStyle = style.SuppressRight ? ExcelBorderStyle.None : (style.xfRight.Style == ExcelBorderStyle.None ? ((style.dxfRight != null && style.dxfRight.HasValue) ? (ExcelBorderStyle)style.dxfRight.Style : ExcelBorderStyle.None) : style.xfRight.Style);
623-
var rightColor = style.dxfRight != null ? PdfColor.SetColorFromHex(style.dxfRight.Color.LookupColor(style.dxfRight)) : PdfColor.SetColorFromHex(style.xfRight.Color.LookupColor(style.xfRight));
618+
var rightStyle = style.xfRight.Style == ExcelBorderStyle.None ? ((style.dxfRight != null && style.dxfRight.HasValue) ? (ExcelBorderStyle)style.dxfRight.Style : ExcelBorderStyle.None) : style.xfRight.Style;
619+
var rightColor = (style.xfRight.Style == ExcelBorderStyle.None && style.dxfRight != null) ? PdfColor.SetColorFromHex(style.dxfRight.Color.LookupColor(style.dxfRight)) : PdfColor.SetColorFromHex(style.xfRight.Color.LookupColor(style.xfRight));
624620

625621
var diagUpStyle = style.DiagonalUp ? style.Diagonal.Style : ExcelBorderStyle.None;
626622
var diagUpColor = style.DiagonalUp ? PdfColor.SetColorFromHex(style.Diagonal.Color.LookupColor(style.Diagonal)) : Color.Transparent;
627623

628624
var diagDownStyle = style.DiagonalDown ? style.Diagonal.Style : ExcelBorderStyle.None;
629625
var diagDownColor = style.DiagonalDown ? PdfColor.SetColorFromHex(style.Diagonal.Color.LookupColor(style.Diagonal)) : Color.Transparent;
630626

627+
if (style.SuppressTop) topStyle = ExcelBorderStyle.None;
628+
if (style.SuppressBottom) bottomStyle = ExcelBorderStyle.None;
629+
if (style.SuppressLeft) leftStyle = ExcelBorderStyle.None;
630+
if (style.SuppressRight) rightStyle = ExcelBorderStyle.None;
631+
631632
border.SetStyle((EPPlus.Export.Pdf.Enums.ExcelBorderStyle)topStyle, topColor,
632633
(EPPlus.Export.Pdf.Enums.ExcelBorderStyle)bottomStyle, bottomColor,
633634
(EPPlus.Export.Pdf.Enums.ExcelBorderStyle)leftStyle, leftColor,

0 commit comments

Comments
 (0)