/// <summary> /// Creates a standard Outer Table with the option of 'keeping all content together' /// by setting <see cref="keepContentTogether"/> to true, it will ensure the entire /// table rows at hand is not broken up across pages and will be treated as a single /// entity. /// </summary> /// <param name="columnWidths">columnWidths</param> /// <param name="font">font</param> /// <param name="fontSize">fontSize</param> /// <param name="defaultPadding">defaultPadding</param> /// <param name="keepContentTogether">keepContentTogether</param> /// <param name="isNewPage">isNewPage</param> /// <param name="isKeptWithNext">isKeptWithNext</param> /// <param name="isKeptTogether">isKeptTogether</param> /// <param name="parentTable">parentTable</param> /// <returns>Outer Table</returns> public Generator.Table CreateOuterTable( string columnWidths, string font, float fontSize, Generator.MarginInfo defaultPadding = null, bool keepContentTogether = false, bool isNewPage = false, bool isKeptWithNext = false, bool isKeptTogether = false, Generator.Table parentTable = null) { // attach to parent table if (parentTable != null) { var row = parentTable.Rows.Add(); var table = new Generator.Table { ColumnWidths = columnWidths, DefaultCellBorder = new Generator.BorderInfo((int)Generator.BorderSide.None, DefaultBorderSize), Border = new Generator.BorderInfo((int)Generator.BorderSide.None, DefaultBorderSize), DefaultCellPadding = defaultPadding ?? DefaultOuterPadding, DefaultCellTextInfo = { FontName = font, FontSize = fontSize }, IsBroken = !keepContentTogether, IsFirstParagraph = isNewPage, IsKeptWithNext = isKeptWithNext }; if (defaultPadding != null) { table.DefaultCellPadding = defaultPadding; } var cell = row.Cells.Add(); cell.Paragraphs.Add(table); return table; } else { var table = new Generator.Table { ColumnWidths = columnWidths, DefaultCellBorder = new Generator.BorderInfo((int)Generator.BorderSide.None, DefaultBorderSize), Border = new Generator.BorderInfo((int)Generator.BorderSide.None, DefaultBorderSize), DefaultCellTextInfo = { FontName = font, FontSize = fontSize }, IsBroken = !keepContentTogether, IsFirstParagraph = isNewPage, IsKeptWithNext = isKeptWithNext }; if (defaultPadding != null) { table.DefaultCellPadding = defaultPadding; } Section.Paragraphs.Add(table); return table; } }
/// <summary> /// Creates a numbered style '1.', representation along with the <see cref="description"/> provided. /// </summary> /// <param name="description">description</param> /// <param name="level">level</param> /// <param name="parentTable">parentTable</param> public void CreateNumberedStyle( string description, Generator.Table parentTable, int level = DefaultStyleLevel) { // create heading object and add set its level var heading = new Generator.Heading(AsposePdf, new Section(), level) { IsAutoSequence = true, IsInList = true, TextInfo = { FontName = Properties.Resources.ArialFont, FontSize = DefaultHeadingTwoFontSize }, LabelPattern = ".", LabelFontName = Properties.Resources.ArialFont, LabelFontSize = DefaultHeadingTwoFontSize, HeadingType = HeadingType.Arab, }; var segment = new Segment(heading); heading.Segments.Add(segment); segment.Content = description; var headingTable = new Generator.Table { ColumnWidths = Properties.Resources.ColumnSpanFourWidth }; var headingTableRow = headingTable.Rows.Add(); var headingTableRowCell = headingTableRow.Cells.Add(); headingTableRowCell.Paragraphs.Add(heading); var row = parentTable.Rows.Add(); var cell = row.Cells.Add(); cell.ColumnsSpan = 2; cell.Paragraphs.Add(headingTable); }
/// <summary> /// Creates a checkbox with a label attached. /// </summary> /// <param name="label">label</param> /// <param name="columnWidths">columnWidths</param> /// <param name="parentTable">parentTable</param> public void CreateLabelWithCheckBox( string label, string columnWidths = "", Generator.Table parentTable = null) { var checkbox = CreateCheckBox(); if (parentTable != null) { var table = new Generator.Table { ColumnWidths = !string.IsNullOrEmpty(columnWidths) ? columnWidths : Properties.Resources.CheckBoxColumnWidths }; var row = table.Rows.Add(); var cellOne = row.Cells.Add(label); cellOne.Padding = DefaultInnerPadding; cellOne.DefaultCellTextInfo.IsTrueTypeFontBold = true; cellOne.DefaultCellTextInfo.FontName = Properties.Resources.ArialFont; cellOne.DefaultCellTextInfo.FontSize = DefaultHeadingTwoFontSize; var cellTwo = row.Cells.Add(); cellTwo.Padding = DefaultInnerPadding; cellTwo.DefaultCellTextInfo.IsTrueTypeFontBold = true; cellTwo.DefaultCellTextInfo.FontName = Properties.Resources.ArialFont; cellTwo.DefaultCellTextInfo.FontSize = DefaultHeadingTwoFontSize; cellTwo.Paragraphs.Add(checkbox); var parentRow = parentTable.Rows.Add(); var parentCell = parentRow.Cells.Add(); parentCell.Paragraphs.Add(table); } }
/// <summary> /// Creates and adds an 'Outer Table' into <see cref="parentTable"/> so the user /// is able to add tables within a parent table. /// </summary> /// <param name="parentTable">parentTable</param> /// <param name="columnWidths">columnWidths</param> /// <param name="font">font</param> /// <param name="fontSize">fontSize</param> /// <param name="defaultPadding">defaultPadding</param> /// <param name="keepContentTogether">keepContentTogether</param> /// <param name="isKeptTogether">isKeptTogether</param> /// <param name="isKeptWithNext">isKeptWithNext</param> /// <param name="columnSpan">columnSpan</param> /// <returns>inserted table</returns> public Generator.Table AddNestedTable( Generator.Table parentTable, string columnWidths, string font, float fontSize, Generator.MarginInfo defaultPadding = null, bool keepContentTogether = false, bool isKeptTogether = false, bool isKeptWithNext = false, int columnSpan = DefaultNestedColumnSpan) { var row = parentTable.Rows.Add(); var cell = row.Cells.Add(); cell.ColumnsSpan = columnSpan; var table = new Generator.Table(cell) { ColumnWidths = columnWidths, DefaultCellPadding = defaultPadding ?? DefaultOuterPadding, DefaultCellTextInfo = { FontName = font, FontSize = fontSize }, IsBroken = !keepContentTogether, IsKeptTogether = isKeptTogether, IsKeptWithNext = isKeptWithNext }; cell.Paragraphs.Add(table); return table; }
/// <summary> /// Create a standard <see cref="Generator.Table"/> from a given <see cref="row"/>. /// This Table will be stored in a new row and harbouring cell from /// <see cref="row"/>, the user must specify <see cref="columnWidths"/> /// and the new table column widths will be adjusted to these values. /// </summary> /// <param name="row">row</param> /// <param name="columnWidths">columnWidths</param> /// <param name="font">font</param> /// <param name="fontSize">fontSize</param> /// <param name="parentPadding">parentPadding</param> /// <param name="isKeptTogether">isKeptTogether</param> /// <param name="isKeptWithNext">isKeptWithNext</param> /// <param name="keepContentTogether">keepContentTogether</param> /// <returns>row</returns> public Generator.Table AddNestedTableFromRow( Generator.Row row, string columnWidths, string font, float fontSize, Generator.MarginInfo parentPadding = null, bool isKeptTogether = false, bool isKeptWithNext = false, bool keepContentTogether = false) { var cell = row.Cells.Add(); cell.IsNoBorder = true; // Set the default cell padding to parentPadding definition row.DefaultRowCellPadding = parentPadding ?? DefaultInnerPadding; var table = new Generator.Table(cell) { ColumnWidths = columnWidths, DefaultCellPadding = parentPadding ?? DefaultOuterPadding, DefaultCellTextInfo = { FontName = font, FontSize = fontSize }, IsBroken = !keepContentTogether, IsKeptTogether = isKeptTogether, IsKeptWithNext = isKeptWithNext }; cell.Paragraphs.Add(table); return table; }
/// <summary> /// Adds a blank row for formatting in a given <see cref="Section"/>. /// NOTE: <see cref="PdfBuilder.Section"/> is maintained in this /// class internally. /// </summary> /// <param name="border">border</param> /// <param name="table">table</param> /// <param name="isShortRow">isShortRow</param> public void BlankRow( Generator.BorderSide border = Generator.BorderSide.None, Generator.Table table = null, bool isShortRow = false) { if (table == null) { table = new Generator.Table { IsFixedRowHeightContentClip = true }; Section.Paragraphs.Add(table); var row = table.Rows.Add(); row.FixedRowHeight = !isShortRow ? DefaultBlankRowHeight : ShortBlankRowHeight; row.Border = new Generator.BorderInfo((int)border, DefaultBorderSize); } else { // add blank row to existing table var row = table.Rows.Add(); var cell = row.Cells.Add(); var blankRowTable = new Generator.Table(cell) { IsFixedRowHeightContentClip = true }; cell.Paragraphs.Add(blankRowTable); row = blankRowTable.Rows.Add(); row.FixedRowHeight = !isShortRow ? DefaultBlankRowHeight : ShortBlankRowHeight; row.Border = new Generator.BorderInfo((int)border, DefaultBorderSize); } }
/// <summary> /// Adds a blank row for formatting in a given <see cref="parentCell"/>. /// Specify <see cref="fixedRowHeight"/> for precise formatting. /// </summary> /// <param name="parentCell">parentCell</param> /// <param name="fixedRowHeight">fixedRowHeight</param> /// <param name="isShortRow">isShortRow</param> /// <param name="border">border</param> public void BlankRow( Generator.Cell parentCell, float fixedRowHeight = 0.0f, bool isShortRow = false, Generator.BorderSide border = Generator.BorderSide.None) { var table = new Generator.Table { IsFixedRowHeightContentClip = true }; if (fixedRowHeight > 0.0f) { var row = table.Rows.Add(); row.FixedRowHeight = !isShortRow ? DefaultBlankRowTextAreaHeight : ShortBlankRowHeight; row.Border = new Generator.BorderInfo((int)border, DefaultBorderSize); } parentCell.Paragraphs.Add(table); }
/// <summary> /// Creates a Header and Footer <see cref="Generator.HeaderFooter"/> for the specified section at hand. /// </summary> /// <param name="section">section</param> /// <param name="headerText">headerText</param> /// <param name="footerText">footerText</param> public void CreateHeaderAndFooterForPdfForSection(Section section, string headerText, string footerText) { // Create a Header Section of the PDF file var header = new Generator.HeaderFooter(section) { // Add Distance From Edge Property to 1.27cm DistanceFromEdge = float.Parse(Properties.Resources.OneCm) * A4PageDistanceFromEdge, }; // set Odd and Even Headers section.OddHeader = header; section.EvenHeader = header; // Set with column widths & default cell border of the table var headerTable = new Generator.Table { DefaultCellBorder = new Generator.BorderInfo((int)Generator.BorderSide.None, DefaultBorderSize), ColumnWidths = section.IsLandscape ? Properties.Resources.HeaderRowLandscapeColumnWidths : Properties.Resources.HeaderRowPortraitColumnWidths }; header.Paragraphs.Add(headerTable); // Create header row and cell content var headerRow = headerTable.Rows.Add(); headerRow.DefaultCellTextInfo.FontName = Properties.Resources.HelveticaFont; headerRow.DefaultCellTextInfo.FontSize = int.Parse(Properties.Resources.HeaderFontSize); // Set the vertical alignment of the cell as center aligned var headerCell = headerRow.Cells.Add(headerText); headerCell.VerticalAlignment = VerticalAlignmentType.Center; headerCell.Alignment = AlignmentType.Center; //=====================================================// // Footer to show Page Number //=====================================================// // Create Footer Section var footer = new Generator.HeaderFooter(section) { //Add Distance From Edge Property to 1.27cm DistanceFromEdge = float.Parse(Properties.Resources.OneCm) * A4PageDistanceFromEdge }; // set Odd and Even Headers section.OddFooter = footer; section.EvenFooter = footer; // Add footer table var footerTable = new Generator.Table { DefaultCellBorder = new Generator.BorderInfo((int)Generator.BorderSide.None, DefaultBorderSize), ColumnWidths = section.IsLandscape ? Properties.Resources.FooterRowLandscapeColumnWidths : Properties.Resources.FooterRowPortraitColumnWidths }; // Set with column widths of the table footer.Paragraphs.Add(footerTable); // Add footer row var footerRow = footerTable.Rows.Add(); footerRow.DefaultCellTextInfo.FontName = Properties.Resources.HelveticaFont; footerRow.DefaultCellTextInfo.FontSize = int.Parse(Properties.Resources.FooterRowFontSize); // Add foot text var footerCell = footerRow.Cells.Add(footerText); footerCell.Alignment = AlignmentType.Left; // Add page number var pageFooterCell = footerRow.Cells.Add(string.Format("Page {0} of {1}", "$p", "$P")); pageFooterCell.VerticalAlignment = VerticalAlignmentType.Center; pageFooterCell.Alignment = AlignmentType.Right; }
/// <summary> /// Creates an 'Inner Table' with no header. Instead Labels and their content are displayed side by side. /// Labels are in 'Bold' and descriptions are in normal form. /// | || | /// E.g. | My Label (in bold) || My Description | /// | || | /// </summary> /// <param name="table">table</param> /// <param name="label">label</param> /// <param name="columnWidths">columnWidths</param> /// <param name="description">description</param> /// <param name="firstSectionText">firstSectionText</param> /// <param name="underlineText">underlineText</param> /// <param name="secondSectionText">secondSectionText</param> /// <param name="padding">padding</param> public void CreateInnerTableLabelValueRow( Generator.Table table, string columnWidths, string description, string label = "", string firstSectionText = "", string underlineText = "", string secondSectionText = "", Generator.MarginInfo padding = null) { var nestedTable = new Generator.Table { ColumnWidths = columnWidths, DefaultCellTextInfo = { FontName = Properties.Resources.ArialFont, FontSize = DefaultInnerBodyFontSize }, DefaultCellBorder = new Generator.BorderInfo((int)Generator.BorderSide.All, DefaultBorderSize), DefaultCellPadding = DefaultInnerPadding, BackgroundColor = new Generator.Color(Properties.Resources.InnerTableColor) }; // add descriptions var tableRow = nestedTable.Rows.Add(); if (!string.IsNullOrEmpty(underlineText) && !string.IsNullOrEmpty(firstSectionText) && !string.IsNullOrEmpty(secondSectionText)) { var labelSectionText = new Generator.Text(Section); var labelSegmentOne = new Segment(labelSectionText) { Content = firstSectionText, TextInfo = { FontName = Properties.Resources.ArialFont, FontSize = DefaultInnerBodyFontSize } }; labelSegmentOne.TextInfo.IsTrueTypeFontBold = true; labelSectionText.Segments.Add(labelSegmentOne); var labelSegmentTwo = new Segment(labelSectionText) { Content = underlineText, TextInfo = { FontName = Properties.Resources.ArialFont, FontSize = DefaultInnerBodyFontSize, IsUnderline = true, IsTrueTypeFontBold = true, } }; labelSectionText.Segments.Add(labelSegmentTwo); var labelSegmentThree = new Segment(labelSectionText) { Content = secondSectionText, TextInfo = { FontName = Properties.Resources.ArialFont, FontSize = DefaultInnerBodyFontSize, IsTrueTypeFontBold = true } }; labelSectionText.Segments.Add(labelSegmentThree); var tableRowCell = tableRow.Cells.Add(); tableRowCell.Paragraphs.Add(labelSectionText); } else { var labelCell = tableRow.Cells.Add(label); labelCell.DefaultCellTextInfo.IsTrueTypeFontBold = true; } var descriptionCell = tableRow.Cells.Add(description); descriptionCell.VerticalAlignment = VerticalAlignmentType.Center; // add content back into parent cell var parentRow = table.Rows.Add(); var parentCell = parentRow.Cells.Add(); parentCell.ColumnsSpan = 2; if (padding != null) { parentCell.Padding = padding; } parentCell.Paragraphs.Add(nestedTable); }
/// <summary> /// Create an 'Inner Table', but ensure that it is not bound to <see cref="Section"/>. /// This is handy if you want to nest inner tables successively and allows the user /// to manipulate the table along with any other cell they wish to inject it in. /// </summary> /// <param name="columnWidths">columnWidths</param> /// <param name="fontName">fontName</param> /// <param name="fontSize">fontSize</param> /// <param name="borderSide">borderSide</param> /// <param name="alignment">alignment</param> /// <param name="padding">padding</param> /// <param name="keepContentTogether">keepContentTogether</param> /// <param name="isKeptWithNext">isKeptWithNext</param> public Generator.Table CreateSimpleInnerTable( string columnWidths, string fontName = "", float fontSize = 0, Generator.BorderSide borderSide = Generator.BorderSide.None, AlignmentType alignment = AlignmentType.Left, Generator.MarginInfo padding = null, bool keepContentTogether = false, bool isKeptWithNext = false) { var table = new Generator.Table { ColumnWidths = columnWidths, DefaultCellTextInfo = { FontSize = fontSize > 0 ? fontSize : DefaultInnerBodyFontSize, FontName = !string.IsNullOrEmpty(fontName) ? fontName : Properties.Resources.ArialFont }, Alignment = alignment, IsBroken = !keepContentTogether, IsFirstRowRepeated = true, IsKeptWithNext = isKeptWithNext }; if (borderSide != Generator.BorderSide.None) { table.Border = new Generator.BorderInfo((int) borderSide, DefaultBorderSize); } if (padding != null) { table.DefaultCellPadding = padding; } return table; }
/// <summary> /// Creates & formats a nested inner table <see cref="Generator.Cell"/> to vertically align content within it. /// E.g. Catchment Areas (header) --> item 01 /// --> item 02 /// --> item 03 etc. /// </summary> /// <param name="row">row</param> /// <param name="descriptions">descriptions</param> /// <param name="fontName">fontName</param> /// <param name="fontSize">fontSize</param> /// <param name="parentPadding">parentPadding</param> public void CreateNestedInnerTableCell( Generator.Row row, IEnumerable<string> descriptions, string fontName = "", int fontSize = 0, Generator.MarginInfo parentPadding = null) { var table = new Generator.Table { DefaultCellTextInfo = { FontName = !string.IsNullOrEmpty(fontName) ? fontName : Properties.Resources.ArialFont, FontSize = fontSize > 0 ? fontSize : DefaultInnerBodyFontSize } }; // add descriptions foreach (var description in descriptions) { var tableRow = table.Rows.Add(); tableRow.Cells.Add(description); } // add content back into parent cell var parentCell = row.Cells.Add(); parentCell.Border = new Generator.BorderInfo((int)Generator.BorderSide.All, DefaultBorderSize); parentCell.Padding = parentPadding ?? DefaultInnerPadding; parentCell.BackgroundColor = new Generator.Color(Properties.Resources.InnerTableColor); parentCell.Paragraphs.Add(table); }
/// <summary> /// Creates a standard 'Inner Table' with respective borders. /// By setting <see cref="keepContentTogether"/> to true, it will ensure the entire /// table rows at hand is not broken up across pages and will be treated as a single /// entity. /// The inner table that is created can be nested in another table if you specify /// <see cref="parentTable"/>. /// </summary> /// <param name="resourceColumnWidths">resourceColumnWidths</param> /// <param name="parentTable">parentTable</param> /// <param name="borderSide">borderSide</param> /// <param name="fontName">fontName</param> /// <param name="fontSize">fontSize</param> /// <param name="alignment">alignment</param> /// <param name="padding">padding</param> /// <param name="keepContentTogether">keepContentTogether</param> /// <param name="isKeptWithNext">isKeptWithNext</param> /// <param name="isKeptTogether">isKeptTogether</param> /// <returns>Inner table</returns> public Generator.Table CreateInnerTable( string resourceColumnWidths, Generator.Table parentTable = null, Generator.BorderSide borderSide = Generator.BorderSide.All, string fontName = "", float fontSize = 0f, AlignmentType alignment = AlignmentType.Left, Generator.MarginInfo padding = null, bool keepContentTogether = false, bool isKeptWithNext = false, bool isKeptTogether = false) { Generator.Table table; if (parentTable != null) { var row = parentTable.Rows.Add(); if (padding != null) { row.DefaultRowCellPadding = padding; } var cell = row.Cells.Add(); table = new Generator.Table(cell) { ColumnWidths = resourceColumnWidths, DefaultCellBorder = borderSide != Generator.BorderSide.None ? new Generator.BorderInfo((int)borderSide, DefaultBorderSize) : new Generator.BorderInfo((int)Generator.BorderSide.None), DefaultCellTextInfo = { FontSize = fontSize > 0 ? fontSize : DefaultInnerBodyFontSize, FontName = !string.IsNullOrEmpty(fontName) ? fontName : Properties.Resources.ArialFont }, Alignment = alignment, IsBroken = !keepContentTogether, IsFirstRowRepeated = true, IsKeptWithNext = isKeptWithNext, IsKeptTogether = isKeptTogether }; cell.IsNoBorder = true; cell.Paragraphs.Add(table); } else { table = new Generator.Table { ColumnWidths = resourceColumnWidths, DefaultCellBorder = borderSide != Generator.BorderSide.None ? new Generator.BorderInfo((int)borderSide, DefaultBorderSize) : new Generator.BorderInfo((int)Generator.BorderSide.None, DefaultBorderSize), DefaultCellTextInfo = { FontSize = fontSize > 0 ? fontSize : DefaultInnerBodyFontSize, FontName = !string.IsNullOrEmpty(fontName) ? fontName : Properties.Resources.ArialFont }, Alignment = alignment, IsBroken = !keepContentTogether, IsFirstRowRepeated = true, IsKeptWithNext = isKeptWithNext }; if (padding != null) { table.DefaultCellPadding = padding; } Section.Paragraphs.Add(table); } return table; }