Imports MigraDoc.DocumentObjectModel Imports MigraDoc.DocumentObjectModel.Shapes.Charts Imports MigraDoc.DocumentObjectModel.Tables Imports EgtBEAMWALL.Core Imports EgtBEAMWALL.Core.ConstGen Imports EgtUILib Imports System.Collections.ObjectModel Module PDFHelper Friend Enum ListTypes As Integer PART = 1 MACHGROUP = 2 RAWPART = 3 End Enum Private m_TestText As String = "Testo di prova per testare MigraDoc nuget package" Private m_TestMediumText As String = "Testo di prova MEDIO per testare MigraDoc nuget package" Private m_TestShortText As String = "Testo di prova CORTO" 'Public Function CreateDocument() As Document ' ' creo nuovo documento MigraDoc ' Dim document As Document = New Document() ' document.Info.Title = "Hello, MigraDoc" ' document.Info.Subject = "Demonstrates an excerpt of the capabilities of MigraDoc." ' document.Info.Author = "Stefan Lange" ' DefineStyles(document) ' DefineCover(document) ' DefineTableOfContents(document) ' DefineContentSection(document) ' DefineParagraphs(document) ' DefineTables(document) ' DefineCharts(document) ' Return document 'End Function Public Function CreateStatReport(ActivePage As Pages) As Document ' creo nuovo documento MigraDoc Dim document As Document = New Document() Dim Project As ProjectFileVM = Map.refProdManagerVM.CurrProd Select Case ActivePage Case Pages.VIEW Project = Map.refProjManagerVM.CurrProj document.Info.Title = Project.sProjId & " - " & Project.BTLFileName_Msg & " - Statistics" Case Pages.MACHINING Project = Map.refProdManagerVM.CurrProd document.Info.Title = Project.sProdId & " - " & Project.ListName_Msg & " - Statistics" End Select document.Info.Subject = "Production statistics of the project" document.Info.Author = "EgtBEAMWALL" DefineStyles(document) DefinePartTotals(document) DefineItemList(document, ListTypes.PART) If ActivePage = Pages.MACHINING Then DefineMachGroupTotals(document) DefineItemList(document, ListTypes.MACHGROUP) DefineItemList(document, ListTypes.RAWPART) End If Return document End Function Public Sub DefinePartTotals(ByVal document As Document) Dim section As Section = document.AddSection() ' cambio orientamento a orizzontale Dim pgSetup As PageSetup = document.DefaultPageSetup.Clone() pgSetup.Orientation = Orientation.Landscape section.PageSetup = pgSetup Dim paragraph As Paragraph = section.AddParagraph("Part Totals", "Heading2") paragraph = section.AddParagraph(Map.refStatisticsVM.BTLTotParts_Msg & Map.refProjectVM.BTLStructureVM.sBTLTotParts) paragraph = section.AddParagraph(Map.refStatisticsVM.BTLTotVolume_Msg & Map.refProjectVM.BTLStructureVM.sBTLTotVolume) paragraph = section.AddParagraph(Map.refStatisticsVM.BTLTotTime_Msg & Map.refProjectVM.BTLStructureVM.sBTLTotTime) paragraph = section.AddParagraph(Map.refStatisticsVM.BTLRemainingTime_Msg & Map.refProjectVM.BTLStructureVM.sBTLRemainingTime) End Sub Public Sub DefineMachGroupTotals(ByVal document As Document) Dim section As Section = document.AddSection() ' cambio orientamento a orizzontale Dim pgSetup As PageSetup = document.DefaultPageSetup.Clone() pgSetup.Orientation = Orientation.Landscape section.PageSetup = pgSetup Dim paragraph As Paragraph = section.AddParagraph("Machgroup Totals", "Heading2") paragraph = section.AddParagraph(Map.refStatisticsVM.TotMachGroups_Msg & Map.refProjectVM.MachGroupPanelVM.sTotMachGroups) paragraph = section.AddParagraph(Map.refStatisticsVM.BTLTotVolume_Msg & Map.refProjectVM.MachGroupPanelVM.sTotVolume) paragraph = section.AddParagraph(Map.refStatisticsVM.BTLTotEstimatedTime_Msg & Map.refProjectVM.MachGroupPanelVM.sTotEstimatedTime) paragraph = section.AddParagraph(Map.refStatisticsVM.BTLTotTime_Msg & Map.refProjectVM.MachGroupPanelVM.sTotTime) paragraph = section.AddParagraph(Map.refStatisticsVM.BTLRemainingTime_Msg & Map.refProjectVM.MachGroupPanelVM.sRemainingTime) paragraph = section.AddParagraph(Map.refStatisticsVM.TotCNTParts_Msg & Map.refProjectVM.BTLStructureVM.sTotCNTParts) paragraph = section.AddParagraph(Map.refStatisticsVM.TotADDEDParts_Msg & Map.refProjectVM.BTLStructureVM.sTotADDEDParts) paragraph = section.AddParagraph(Map.refStatisticsVM.TotINPRODParts_Msg & Map.refProjectVM.BTLStructureVM.sTotINPRODParts) paragraph = section.AddParagraph(Map.refStatisticsVM.TotDONEParts_Msg & Map.refProjectVM.BTLStructureVM.sTotDONEParts) End Sub Public Sub DefineItemList(ByVal document As Document, nListType As ListTypes) Dim section As Section = document.LastSection() Select Case nListType Case ListTypes.PART section.AddParagraph("Part List", "Heading2") Case ListTypes.MACHGROUP section.AddParagraph("MachGroup List", "Heading2") Case ListTypes.RAWPART section.AddParagraph("RawPart List", "Heading2") End Select Dim table As Table = New Table() table.Borders.Width = 0.75 ' ciclo sulle colonne per creare la tabella e riempirne i campi ' -2 -> creo colonne ' -1 -> riempio colonne della riga degli header ' >=0 -> riempio le colonne con i valori dei pezzi Dim Itemlist As IEnumerable(Of Object) = Nothing Select Case nListType Case ListTypes.PART Itemlist = Map.refProjectVM.BTLStructureVM.BTLPartVMList Case ListTypes.MACHGROUP Itemlist = Map.refProjectVM.MachGroupPanelVM.MachGroupVMList Case ListTypes.RAWPART Itemlist = Map.refStatisticsVM.RawPartList End Select 'If m_ActivePage = Pages.VIEW Then ' Itemlist = Map.refProjectVM.BTLStructureVM.BTLPartVMList.ToList() 'ElseIf m_ActivePage = Pages.MACHINING Then ' Itemlist = Map.refProjectVM.MachGroupPanelVM.MachGroupVMList.ToList() 'End If For PartIndex = -2 To Itemlist.Count - 1 Dim BTLPartVM As BTLPartVM = Nothing Dim MachGroupVM As MyMachGroupVM = Nothing Dim RawPart As SParam = Nothing Dim row As Row = Nothing If PartIndex <> -2 Then ' aggiungo riga row = table.AddRow() End If If PartIndex = -1 Then ' imposto la riga come header che si ripetera' all'inizio di ogni pagina row.HeadingFormat = True ' coloro sfondo riga degli header row.Shading.Color = Colors.Aqua ElseIf PartIndex >= 0 Then ' recupero elemento della riga Select Case nListType Case ListTypes.PART BTLPartVM = Map.refProjectVM.BTLStructureVM.BTLPartVMList(PartIndex) Case ListTypes.MACHGROUP MachGroupVM = Map.refProjectVM.MachGroupPanelVM.MachGroupVMList(PartIndex) Case ListTypes.RAWPART RawPart = Map.refStatisticsVM.RawPartList(PartIndex) End Select End If Dim Columnlist As ObservableCollection(Of EgtDataGridColumn) = Nothing Select Case nListType Case ListTypes.PART Columnlist = Map.refStatisticsVM.StatisticsColumns Case ListTypes.MACHGROUP Columnlist = Map.refStatisticsVM.OptimizerStatisticsColumns Case ListTypes.RAWPART Columnlist = Map.refStatisticsVM.RawPartStatisticsColumns End Select For ColumnIndex = 0 To Columnlist.Count - 1 Select Case Columnlist(ColumnIndex).Name Case "colPDN" If PartIndex = -2 Then table.AddColumn(Unit.FromCentimeter(1.5)) ElseIf PartIndex = -1 Then row.Cells(ColumnIndex).AddParagraph(Map.refStatisticsVM.PDN_Msg) ElseIf nListType = ListTypes.PART Then row.Cells(ColumnIndex).AddParagraph(BTLPartVM.nPDN) End If Case "colID" If PartIndex = -2 Then table.AddColumn(Unit.FromCentimeter(1.5)) ElseIf PartIndex = -1 Then row.Cells(ColumnIndex).AddParagraph(Map.refStatisticsVM.ID_Msg) ElseIf nListType = ListTypes.MACHGROUP Then row.Cells(ColumnIndex).AddParagraph(MachGroupVM.Id) End If Case "colW" If PartIndex = -2 Then table.AddColumn(Unit.FromCentimeter(2)) ElseIf PartIndex = -1 Then row.Cells(ColumnIndex).AddParagraph(Map.refStatisticsVM.W_Msg) ElseIf nListType = ListTypes.PART Then row.Cells(ColumnIndex).AddParagraph(BTLPartVM.sW) ElseIf nListType = ListTypes.MACHGROUP Then row.Cells(ColumnIndex).AddParagraph(MachGroupVM.dW) ElseIf nListType = ListTypes.RAWPART Then row.Cells(ColumnIndex).AddParagraph(RawPart.sW) End If Case "colH" If PartIndex = -2 Then table.AddColumn(Unit.FromCentimeter(2)) ElseIf PartIndex = -1 Then row.Cells(ColumnIndex).AddParagraph(Map.refStatisticsVM.H_Msg) ElseIf nListType = ListTypes.PART Then row.Cells(ColumnIndex).AddParagraph(BTLPartVM.sH) ElseIf nListType = ListTypes.MACHGROUP Then row.Cells(ColumnIndex).AddParagraph(MachGroupVM.dH) ElseIf nListType = ListTypes.RAWPART Then row.Cells(ColumnIndex).AddParagraph(RawPart.sH) End If Case "colL" If PartIndex = -2 Then table.AddColumn(Unit.FromCentimeter(2)) ElseIf PartIndex = -1 Then row.Cells(ColumnIndex).AddParagraph(Map.refStatisticsVM.L_Msg) ElseIf nListType = ListTypes.PART Then row.Cells(ColumnIndex).AddParagraph(BTLPartVM.sL) ElseIf nListType = ListTypes.MACHGROUP Then row.Cells(ColumnIndex).AddParagraph(MachGroupVM.dL) ElseIf nListType = ListTypes.RAWPART Then row.Cells(ColumnIndex).AddParagraph(RawPart.sL) End If Case "colDESC" If PartIndex = -2 Then table.AddColumn(Unit.FromCentimeter(4)) ElseIf PartIndex = -1 Then row.Cells(ColumnIndex).AddParagraph(Map.refStatisticsVM.NAM_Msg) ElseIf nListType = ListTypes.PART Then row.Cells(ColumnIndex).AddParagraph(BTLPartVM.sNAM) ElseIf nListType = ListTypes.MACHGROUP Then row.Cells(ColumnIndex).AddParagraph(MachGroupVM.nName) End If Case "colNAME" If PartIndex = -2 Then table.AddColumn(Unit.FromCentimeter(4)) ElseIf PartIndex = -1 Then row.Cells(ColumnIndex).AddParagraph(Map.refStatisticsVM.NAM_Msg) ElseIf nListType = ListTypes.PART Then row.Cells(ColumnIndex).AddParagraph(BTLPartVM.sNAM) ElseIf nListType = ListTypes.MACHGROUP Then row.Cells(ColumnIndex).AddParagraph(MachGroupVM.nName) End If Case "colMATERIAL" If PartIndex = -2 Then table.AddColumn(Unit.FromCentimeter(2)) ElseIf PartIndex = -1 Then row.Cells(ColumnIndex).AddParagraph(Map.refStatisticsVM.MAT_Msg) ElseIf nListType = ListTypes.PART Then row.Cells(ColumnIndex).AddParagraph(BTLPartVM.sMATERIAL) ElseIf nListType = ListTypes.MACHGROUP Then row.Cells(ColumnIndex).AddParagraph(MachGroupVM.sMATERIAL) ElseIf nListType = ListTypes.RAWPART Then row.Cells(ColumnIndex).AddParagraph(RawPart.sMaterial) End If Case "colCNT" If PartIndex = -2 Then table.AddColumn(Unit.FromCentimeter(1)) ElseIf PartIndex = -1 Then row.Cells(ColumnIndex).AddParagraph(Map.refStatisticsVM.CNT_Msg) ElseIf nListType = ListTypes.PART Then row.Cells(ColumnIndex).AddParagraph(BTLPartVM.sCNT) End If Case "colADDED" If PartIndex = -2 Then table.AddColumn(Unit.FromCentimeter(1)) ElseIf PartIndex = -1 Then row.Cells(ColumnIndex).AddParagraph(Map.refStatisticsVM.ADDED_Msg) ElseIf nListType = ListTypes.PART Then row.Cells(ColumnIndex).AddParagraph(BTLPartVM.sADDED) End If Case "colINPROD" If PartIndex = -2 Then table.AddColumn(Unit.FromCentimeter(1)) ElseIf PartIndex = -1 Then row.Cells(ColumnIndex).AddParagraph(Map.refStatisticsVM.INPROD_Msg) ElseIf nListType = ListTypes.PART Then row.Cells(ColumnIndex).AddParagraph(BTLPartVM.nINPROD) End If Case "colDONE" If PartIndex = -2 Then table.AddColumn(Unit.FromCentimeter(1)) ElseIf PartIndex = -1 Then row.Cells(ColumnIndex).AddParagraph(Map.refStatisticsVM.DONE_Msg) ElseIf nListType = ListTypes.PART Then row.Cells(ColumnIndex).AddParagraph(BTLPartVM.nDONE) End If Case "colUSAGE" If PartIndex = -2 Then table.AddColumn(Unit.FromCentimeter(2)) ElseIf PartIndex = -1 Then row.Cells(ColumnIndex).AddParagraph(Map.refStatisticsVM.Used_Msg) ElseIf nListType = ListTypes.MACHGROUP Then row.Cells(ColumnIndex).AddParagraph(MachGroupVM.sUsage) End If Case "colWASTE" If PartIndex = -2 Then table.AddColumn(Unit.FromCentimeter(2)) ElseIf PartIndex = -1 Then row.Cells(ColumnIndex).AddParagraph(Map.refStatisticsVM.Waste_Msg) ElseIf nListType = ListTypes.MACHGROUP Then row.Cells(ColumnIndex).AddParagraph(MachGroupVM.sWaste) End If Case "colUNITVOLUME" If PartIndex = -2 Then table.AddColumn(Unit.FromCentimeter(2)) ElseIf PartIndex = -1 Then row.Cells(ColumnIndex).AddParagraph(Map.refStatisticsVM.UNIT_VOLUME_Msg) ElseIf nListType = ListTypes.PART Then row.Cells(ColumnIndex).AddParagraph(BTLPartVM.sUnitVolume) ElseIf nListType = ListTypes.MACHGROUP Then row.Cells(ColumnIndex).AddParagraph(MachGroupVM.dUnitVolume) End If Case "colTOTVOLUME" If PartIndex = -2 Then table.AddColumn(Unit.FromCentimeter(2)) ElseIf PartIndex = -1 Then row.Cells(ColumnIndex).AddParagraph(Map.refStatisticsVM.TOT_VOLUME_Msg) ElseIf nListType = ListTypes.PART Then row.Cells(ColumnIndex).AddParagraph(BTLPartVM.sTotVolume) End If Case "colUNITTIME" If PartIndex = -2 Then table.AddColumn(Unit.FromCentimeter(2)) ElseIf PartIndex = -1 Then row.Cells(ColumnIndex).AddParagraph(Map.refStatisticsVM.UNIT_TIME_Msg) ElseIf nListType = ListTypes.PART Then row.Cells(ColumnIndex).AddParagraph(BTLPartVM.sUnitTime) ElseIf nListType = ListTypes.MACHGROUP Then row.Cells(ColumnIndex).AddParagraph(MachGroupVM.sUnitTime) End If Case "colTOTTIME" If PartIndex = -2 Then table.AddColumn(Unit.FromCentimeter(2)) ElseIf PartIndex = -1 Then row.Cells(ColumnIndex).AddParagraph(Map.refStatisticsVM.TOT_TIME_Msg) ElseIf nListType = ListTypes.PART Then row.Cells(ColumnIndex).AddParagraph(BTLPartVM.sTotTime) End If Case "colQTY" If PartIndex = -2 Then table.AddColumn(Unit.FromCentimeter(2)) ElseIf PartIndex = -1 Then row.Cells(ColumnIndex).AddParagraph(Map.refStatisticsVM.QTY_Msg) ElseIf nListType = ListTypes.RAWPART Then row.Cells(ColumnIndex).AddParagraph(RawPart.nQuantity) End If End Select Next Next ' aggiungo tabella all'ultima sezione document.LastSection.Add(table) End Sub ''' ''' Defines the styles used in the document. ''' Public Sub DefineStyles(ByVal document As Document) ' recupera lo stile predefinito Normal. Dim style As Style = document.Styles("Normal") ' Because all styles are derived from Normal, the next line changes the ' font of the whole document. Or, more exactly, it changes the font of ' all styles and paragraphs that do not redefine the font. style.Font.Name = "Arial" ' Heading1 to Heading9 are predefined styles with an outline level. An outline level ' other than OutlineLevel.BodyText automatically creates the outline (or bookmarks) ' in PDF. style = document.Styles("Heading1") style.Font.Name = "Tahoma" style.Font.Size = 14 style.Font.Bold = True style.Font.Color = Colors.DarkBlue style.ParagraphFormat.PageBreakBefore = True style.ParagraphFormat.SpaceAfter = 6 style = document.Styles("Heading2") style.Font.Size = 12 style.Font.Bold = True style.ParagraphFormat.PageBreakBefore = False style.ParagraphFormat.SpaceBefore = 6 style.ParagraphFormat.SpaceAfter = 6 style = document.Styles("Heading3") style.Font.Size = 10 style.Font.Bold = True style.Font.Italic = True style.ParagraphFormat.SpaceBefore = 6 style.ParagraphFormat.SpaceAfter = 3 style = document.Styles(StyleNames.Header) style.ParagraphFormat.AddTabStop("16cm", TabAlignment.Right) style = document.Styles(StyleNames.Footer) style.ParagraphFormat.AddTabStop("8cm", TabAlignment.Center) ' Create a new style called TextBox based on style Normal style = document.Styles.AddStyle("TextBox", "Normal") style.ParagraphFormat.Alignment = ParagraphAlignment.Justify style.ParagraphFormat.Borders.Width = 2.5 style.ParagraphFormat.Borders.Distance = "3pt" style.ParagraphFormat.Shading.Color = Colors.SkyBlue ' Create a new style called TOC based on style Normal style = document.Styles.AddStyle("TOC", "Normal") style.ParagraphFormat.AddTabStop("16cm", TabAlignment.Right, TabLeader.Dots) style.ParagraphFormat.Font.Color = Colors.Blue End Sub '''' '''' Defines the styles used in the document. '''' 'Public Sub DefineStyles(ByVal document As Document) ' ' recupera lo stile predefinito Normal. ' Dim style As Style = document.Styles("Normal") ' ' Because all styles are derived from Normal, the next line changes the ' ' font of the whole document. Or, more exactly, it changes the font of ' ' all styles and paragraphs that do not redefine the font. ' style.Font.Name = "Times New Roman" ' ' Heading1 to Heading9 are predefined styles with an outline level. An outline level ' ' other than OutlineLevel.BodyText automatically creates the outline (or bookmarks) ' ' in PDF. ' style = document.Styles("Heading1") ' style.Font.Name = "Tahoma" ' style.Font.Size = 14 ' style.Font.Bold = True ' style.Font.Color = Colors.DarkBlue ' style.ParagraphFormat.PageBreakBefore = True ' style.ParagraphFormat.SpaceAfter = 6 ' style = document.Styles("Heading2") ' style.Font.Size = 12 ' style.Font.Bold = True ' style.ParagraphFormat.PageBreakBefore = False ' style.ParagraphFormat.SpaceBefore = 6 ' style.ParagraphFormat.SpaceAfter = 6 ' style = document.Styles("Heading3") ' style.Font.Size = 10 ' style.Font.Bold = True ' style.Font.Italic = True ' style.ParagraphFormat.SpaceBefore = 6 ' style.ParagraphFormat.SpaceAfter = 3 ' style = document.Styles(StyleNames.Header) ' style.ParagraphFormat.AddTabStop("16cm", TabAlignment.Right) ' style = document.Styles(StyleNames.Footer) ' style.ParagraphFormat.AddTabStop("8cm", TabAlignment.Center) ' ' Create a new style called TextBox based on style Normal ' style = document.Styles.AddStyle("TextBox", "Normal") ' style.ParagraphFormat.Alignment = ParagraphAlignment.Justify ' style.ParagraphFormat.Borders.Width = 2.5 ' style.ParagraphFormat.Borders.Distance = "3pt" ' style.ParagraphFormat.Shading.Color = Colors.SkyBlue ' ' Create a new style called TOC based on style Normal ' style = document.Styles.AddStyle("TOC", "Normal") ' style.ParagraphFormat.AddTabStop("16cm", TabAlignment.Right, TabLeader.Dots) ' style.ParagraphFormat.Font.Color = Colors.Blue 'End Sub ''' ''' Defines the cover page. ''' Public Sub DefineCover(ByVal document As Document) Dim section As Section = document.AddSection() Dim paragraph As Paragraph = section.AddParagraph() paragraph.Format.SpaceAfter = "3cm" Dim image As Shapes.Image = section.AddImage("../../images/Logo landscape.png") image.Width = "10cm" paragraph = section.AddParagraph("A sample document that demonstrates the" & vbLf & "capabilities of MigraDoc") paragraph.Format.Font.Size = 16 paragraph.Format.Font.Color = Colors.DarkRed paragraph.Format.SpaceBefore = "8cm" paragraph.Format.SpaceAfter = "3cm" paragraph = section.AddParagraph("Rendering date: ") paragraph.AddDateField() End Sub ''' ''' Defines table of contents. ''' Public Sub DefineTableOfContents(ByVal document As Document) Dim section As Section = document.LastSection section.AddPageBreak() Dim paragraph As Paragraph = section.AddParagraph("Table of Contents") paragraph.Format.Font.Size = 14 paragraph.Format.Font.Bold = True paragraph.Format.SpaceAfter = 24 paragraph.Format.OutlineLevel = OutlineLevel.Level1 paragraph = section.AddParagraph() paragraph.Style = "TOC" Dim hyperlink As Hyperlink = paragraph.AddHyperlink("Paragraphs") hyperlink.AddText("Paragraphs" & vbTab) hyperlink.AddPageRefField("Paragraphs") paragraph = section.AddParagraph() paragraph.Style = "TOC" hyperlink = paragraph.AddHyperlink("Tables") hyperlink.AddText("Tables" & vbTab) hyperlink.AddPageRefField("Tables") paragraph = section.AddParagraph() paragraph.Style = "TOC" hyperlink = paragraph.AddHyperlink("Charts") hyperlink.AddText("Charts" & vbTab) hyperlink.AddPageRefField("Charts") End Sub ''' ''' Defines page setup, headers, and footers. ''' Private Sub DefineContentSection(ByVal document As Document) Dim section As Section = document.AddSection() section.PageSetup.OddAndEvenPagesHeaderFooter = True section.PageSetup.StartingNumber = 1 Dim header As HeaderFooter = section.Headers.Primary header.AddParagraph(vbTab & "Odd Page Header") header = section.Headers.EvenPage header.AddParagraph("Even Page Header") ' Create a paragraph with centered page number. See definition of style "Footer". Dim paragraph As Paragraph = New Paragraph() paragraph.AddTab() paragraph.AddPageField() ' Add paragraph to footer for odd pages. section.Footers.Primary.Add(paragraph) ' Add clone of paragraph to footer for odd pages. Cloning is necessary because an object must ' not belong to more than one other object. If you forget cloning an exception is thrown. section.Footers.EvenPage.Add(paragraph.Clone()) End Sub #Region "Paragraphs" Public Sub DefineParagraphs(ByVal document As Document) Dim paragraph As Paragraph = document.LastSection.AddParagraph("Paragraph Layout Overview", "Heading1") paragraph.AddBookmark("Paragraphs") DemonstrateParagraphsAlignment(document) DemonstrateIndent(document) DemonstrateFormattedText(document) DemonstrateBordersAndShading(document) End Sub Private Sub DemonstrateParagraphsAlignment(ByVal document As Document) document.LastSection.AddParagraph("Alignment", "Heading2") document.LastSection.AddParagraph("Left Aligned", "Heading3") Dim paragraph As Paragraph = document.LastSection.AddParagraph() paragraph.Format.Alignment = ParagraphAlignment.Left paragraph.AddText(m_TestText) document.LastSection.AddParagraph("Right Aligned", "Heading3") paragraph = document.LastSection.AddParagraph() paragraph.Format.Alignment = ParagraphAlignment.Right paragraph.AddText(m_TestText) document.LastSection.AddParagraph("Centered", "Heading3") paragraph = document.LastSection.AddParagraph() paragraph.Format.Alignment = ParagraphAlignment.Center paragraph.AddText(m_TestText) document.LastSection.AddParagraph("Justified", "Heading3") paragraph = document.LastSection.AddParagraph() paragraph.Format.Alignment = ParagraphAlignment.Justify paragraph.AddText(m_TestMediumText) End Sub Private Sub DemonstrateIndent(ByVal document As Document) document.LastSection.AddParagraph("Indent", "Heading2") document.LastSection.AddParagraph("Left Indent", "Heading3") Dim paragraph As Paragraph = document.LastSection.AddParagraph() paragraph.Format.LeftIndent = "2cm" paragraph.AddText(m_TestText) document.LastSection.AddParagraph("Right Indent", "Heading3") paragraph = document.LastSection.AddParagraph() paragraph.Format.RightIndent = "1in" paragraph.AddText(m_TestText) document.LastSection.AddParagraph("First Line Indent", "Heading3") paragraph = document.LastSection.AddParagraph() paragraph.Format.FirstLineIndent = "12mm" paragraph.AddText(m_TestText) document.LastSection.AddParagraph("First Line Negative Indent", "Heading3") paragraph = document.LastSection.AddParagraph() paragraph.Format.LeftIndent = "1.5cm" paragraph.Format.FirstLineIndent = "-1.5cm" paragraph.AddText(m_TestText) End Sub Private Sub DemonstrateFormattedText(ByVal document As Document) document.LastSection.AddParagraph("Formatted Text", "Heading2") Dim paragraph As Paragraph = document.LastSection.AddParagraph() paragraph.AddText("Text can be formatted ") paragraph.AddFormattedText("bold", TextFormat.Bold) paragraph.AddText(", ") paragraph.AddFormattedText("italic", TextFormat.Italic) paragraph.AddText(", or ") paragraph.AddFormattedText("bold & italic", TextFormat.Bold Or TextFormat.Italic) paragraph.AddText(".") paragraph.AddLineBreak() paragraph.AddText("You can set the ") Dim formattedText As FormattedText = paragraph.AddFormattedText("size ") formattedText.Size = 15 paragraph.AddText("the ") formattedText = paragraph.AddFormattedText("color ") formattedText.Color = Colors.Firebrick paragraph.AddText("the ") formattedText = paragraph.AddFormattedText("font", New Font("Verdana")) paragraph.AddText(".") paragraph.AddLineBreak() paragraph.AddText("You can set the ") formattedText = paragraph.AddFormattedText("subscript") formattedText.Subscript = True paragraph.AddText(" or ") formattedText = paragraph.AddFormattedText("superscript") formattedText.Superscript = True paragraph.AddText(".") End Sub Private Sub DemonstrateBordersAndShading(ByVal document As Document) document.LastSection.AddPageBreak() document.LastSection.AddParagraph("Borders and Shading", "Heading2") document.LastSection.AddParagraph("Border around Paragraph", "Heading3") Dim paragraph As Paragraph = document.LastSection.AddParagraph() paragraph.Format.Borders.Width = 2.5 paragraph.Format.Borders.Color = Colors.Navy paragraph.Format.Borders.Distance = 3 paragraph.AddText(m_TestMediumText) document.LastSection.AddParagraph("Shading", "Heading3") paragraph = document.LastSection.AddParagraph() paragraph.Format.Shading.Color = Colors.LightCoral paragraph.AddText(m_TestText) document.LastSection.AddParagraph("Borders & Shading", "Heading3") paragraph = document.LastSection.AddParagraph() paragraph.Style = "TextBox" paragraph.AddText(m_TestMediumText) End Sub #End Region ' Paragraphs #Region "Tables" Public Sub DefineTables(ByVal document As MigraDoc.DocumentObjectModel.Document) Dim paragraph As Paragraph = document.LastSection.AddParagraph("Table Overview", "Heading1") paragraph.AddBookmark("Tables") DemonstrateSimpleTable(document) DemonstrateTableAlignment(document) DemonstrateCellMerge(document) End Sub Public Sub DemonstrateSimpleTable(ByVal document As Document) document.LastSection.AddParagraph("Simple Tables", "Heading2") Dim table As Table = New Table() table.Borders.Width = 0.75 Dim column As Column = table.AddColumn(Unit.FromCentimeter(2)) column.Format.Alignment = ParagraphAlignment.Center table.AddColumn(Unit.FromCentimeter(5)) Dim row As Row = table.AddRow() row.Shading.Color = Colors.PaleGoldenrod Dim cell As Cell = row.Cells(0) cell.AddParagraph("Itemus") cell = row.Cells(1) cell.AddParagraph("Descriptum") row = table.AddRow() cell = row.Cells(0) cell.AddParagraph("1") cell = row.Cells(1) cell.AddParagraph(m_TestShortText) row = table.AddRow() cell = row.Cells(0) cell.AddParagraph("2") cell = row.Cells(1) cell.AddParagraph(m_TestText) table.SetEdge(0, 0, 2, 3, Edge.Box, BorderStyle.Single, 1.5, Colors.Black) document.LastSection.Add(table) End Sub Public Sub DemonstrateTableAlignment(ByVal document As MigraDoc.DocumentObjectModel.Document) document.LastSection.AddParagraph("Cell Alignment", "Heading2") Dim table As Table = document.LastSection.AddTable() table.Borders.Visible = True table.Format.Shading.Color = Colors.LavenderBlush table.Shading.Color = Colors.Salmon table.TopPadding = 5 table.BottomPadding = 5 Dim column As Column = table.AddColumn() column.Format.Alignment = ParagraphAlignment.Left column = table.AddColumn() column.Format.Alignment = ParagraphAlignment.Center column = table.AddColumn() column.Format.Alignment = ParagraphAlignment.Right table.Rows.Height = 35 Dim row As Row = table.AddRow() row.VerticalAlignment = VerticalAlignment.Top row.Cells(0).AddParagraph("Text") row.Cells(1).AddParagraph("Text") row.Cells(2).AddParagraph("Text") row = table.AddRow() row.VerticalAlignment = VerticalAlignment.Center row.Cells(0).AddParagraph("Text") row.Cells(1).AddParagraph("Text") row.Cells(2).AddParagraph("Text") row = table.AddRow() row.VerticalAlignment = VerticalAlignment.Bottom row.Cells(0).AddParagraph("Text") row.Cells(1).AddParagraph("Text") row.Cells(2).AddParagraph("Text") End Sub Public Sub DemonstrateCellMerge(ByVal document As Document) document.LastSection.AddParagraph("Cell Merge", "Heading2") Dim table As Table = document.LastSection.AddTable() table.Borders.Visible = True table.TopPadding = 5 table.BottomPadding = 5 Dim column As Column = table.AddColumn() column.Format.Alignment = ParagraphAlignment.Left column = table.AddColumn() column.Format.Alignment = ParagraphAlignment.Center column = table.AddColumn() column.Format.Alignment = ParagraphAlignment.Right table.Rows.Height = 35 Dim row As Row = table.AddRow() row.Cells(0).AddParagraph("Merge Right") row.Cells(0).MergeRight = 1 row = table.AddRow() row.VerticalAlignment = VerticalAlignment.Bottom row.Cells(0).MergeDown = 1 row.Cells(0).VerticalAlignment = VerticalAlignment.Bottom row.Cells(0).AddParagraph("Merge Down") table.AddRow() End Sub #End Region ' Tables Public Sub DefineCharts(ByVal document As Document) Dim paragraph As Paragraph = document.LastSection.AddParagraph("Chart Overview", "Heading1") paragraph.AddBookmark("Charts") document.LastSection.AddParagraph("Sample Chart", "Heading2") Dim chart As Chart = New Chart() chart.Left = 0 chart.Width = Unit.FromCentimeter(16) chart.Height = Unit.FromCentimeter(12) Dim series As Series = chart.SeriesCollection.AddSeries() series.ChartType = ChartType.Column2D series.Add(New Double() {1, 17, 45, 5, 3, 20, 11, 23, 8, 19}) series.HasDataLabel = True series = chart.SeriesCollection.AddSeries() series.ChartType = ChartType.Line series.Add(New Double() {41, 7, 5, 45, 13, 10, 21, 13, 18, 9}) Dim xseries As XSeries = chart.XValues.AddXSeries() xseries.Add("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N") chart.XAxis.MajorTickMark = TickMarkType.Outside chart.XAxis.Title.Caption = "X-Axis" chart.YAxis.MajorTickMark = TickMarkType.Outside chart.YAxis.HasMajorGridlines = True chart.PlotArea.LineFormat.Color = Colors.DarkGray chart.PlotArea.LineFormat.Width = 1 document.LastSection.Add(chart) End Sub End Module