VintaSoft Imaging .NET SDK 12.4: Documentation for .NET developer
In This Topic
    DOCX: Programmatically edit an existing DOCX document using low-lewel editor
    In This Topic
    The DocxDocumentEditor class is a low-level editor for existing DOCX document, i.e. class allows to edit a DOCX document in terms of Open XML document.

    The DocxDocumentEditor class is designed for fast and easy development of report/invoice generator based on DOCX document template.

    If you want to generate DOCX report/invoice, you need to do the following steps:
    Report Generator Demo project contains several examples,which demonstrate how to generate reports, which are based on DOCX template.

    DocxDocumentEditor class

    DocxDocumentEditor class allows to:

    OpenXmlDocumentElement class

    OpenXmlDocumentElement represents a base class of all elements in a DOCX or XLSX document and allows to:
    Here is C#/VB.NET code that shows how to find and replace text in DOCX document (example uses template document FindAndReplaceText_template.docx):
    public static void DocxFindAndReplaceTextExample()
    {
        string templateFilename = "FindAndReplaceText_template.docx";
        string outFilename = "FindAndReplaceText.docx";
        string outPdfFilename = "FindAndReplaceText.pdf";
    
        // create DocxDocumentEditor that allows to edit file "FindAndReplaceText_template.docx"
        using (Vintasoft.Imaging.Office.OpenXml.Editor.Docx.DocxDocumentEditor editor =
            new Vintasoft.Imaging.Office.OpenXml.Editor.Docx.DocxDocumentEditor(templateFilename))
        {
            // get document body
            Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlDocumentElement documentBody = editor.Body;
    
            // replace first occurrence of text "[field1]" by text "value1"
            documentBody["[field1]"] = "value1";
    
            // replace all occurrences of text "[field2]" by text "value2"
            documentBody.ReplaceText("[field2]", "value2");
    
            // find text content that corresponds to the text "[field3]"
            Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlTextContent field3Content = documentBody.FindText("[field3]");
            // change text in found text content
            field3Content.Text = "value3";
    
            // replace text "[multiline_field]" by multiline text
            documentBody["[multiline_field]"] = "\nline1\nline2\nline3";
    
            // save changed document to a DOCX file
            editor.Save(outFilename);
    
            // export changed document to a PDF document
            editor.Export(outPdfFilename);
        }
    }
    
    Public Shared Sub DocxFindAndReplaceTextExample()
        Dim templateFilename As String = "FindAndReplaceText_template.docx"
        Dim outFilename As String = "FindAndReplaceText.docx"
        Dim outPdfFilename As String = "FindAndReplaceText.pdf"
    
        ' create DocxDocumentEditor that allows to edit file "FindAndReplaceText_template.docx"
        Using editor As New Vintasoft.Imaging.Office.OpenXml.Editor.Docx.DocxDocumentEditor(templateFilename)
            ' get document body
            Dim documentBody As Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlDocumentElement = editor.Body
    
            ' replace first occurrence of text "[field1]" by text "value1"
            documentBody("[field1]") = "value1"
    
            ' replace all occurrences of text "[field2]" by text "value2"
            documentBody.ReplaceText("[field2]", "value2")
    
            ' find text content that corresponds to the text "[field3]"
            Dim field3Content As Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlTextContent = documentBody.FindText("[field3]")
            ' change text in found text content
            field3Content.Text = "value3"
    
            ' replace text "[multiline_field]" by multiline text
            documentBody("[multiline_field]") = vbLf & "line1" & vbLf & "line2" & vbLf & "line3"
    
            ' save changed document to a DOCX file
            editor.Save(outFilename)
    
            ' export changed document to a PDF document
            editor.Export(outPdfFilename)
        End Using
    End Sub
    



    OpenXmlTextContent class

    OpenXmlTextContent represents the text content of DOCX or XLSX document and allows to:
    Here is C#/VB.NET code that shows how to change text properties of text content (example uses template document ChangeTextProperties_template.docx):
    public static void DocxChangeTextPropertiesExample()
    {
        string templateFilename = "ChangeTextProperties_template.docx";
        string outFilename = "ChangeTextProperties.docx";
        string outPdfFilename = "ChangeTextProperties.pdf";
    
        // create DocxDocumentEditor that allows to edit file "ChangeTextProperties_template.docx"
        using (Vintasoft.Imaging.Office.OpenXml.Editor.Docx.DocxDocumentEditor editor =
            new Vintasoft.Imaging.Office.OpenXml.Editor.Docx.DocxDocumentEditor(templateFilename))
        {
            // get document body
            Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlDocumentElement documentBody = editor.Body;
    
            // set text color
            documentBody.FindText("COLOR").Substring(0, 2).SetTextProperties(CreateColorTextProperties(System.Drawing.Color.Red));
            documentBody.FindText("COLOR").Substring(2, 1).SetTextProperties(CreateColorTextProperties(System.Drawing.Color.Green));
            documentBody.FindText("COLOR").Substring(3, 2).SetTextProperties(CreateColorTextProperties(System.Drawing.Color.Blue));
    
            // highlight text
            Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlTextProperties highlightedTextProperties =
                new Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlTextProperties();
            highlightedTextProperties.Highlight = Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlTextHighlightType.Green;
            documentBody.FindText("highlighted text").SetTextProperties(highlightedTextProperties);
    
            // set text "bold text" as bold text
            documentBody.FindText("bold text").SetTextProperties(Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlTextProperties.BoldText);
    
            // set text "italic text" as italic text
            documentBody.FindText("italic text").SetTextProperties(Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlTextProperties.ItalicText);
    
            // set text "underline text" as underline text
            documentBody.FindText("underline text").SetTextProperties(Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlTextProperties.UnderlineText);
    
            // set text "strike text" as striked out text
            documentBody.FindText("strike text").SetTextProperties(Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlTextProperties.StrikeText);
    
            // change font size
            Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlTextProperties setTextSize =
                new Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlTextProperties();
            setTextSize.FontSize = 16;
            documentBody.FindText("text with size 16pt").Substring(0, 4).SetTextProperties(setTextSize);
    
            // change text style
            Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlTextProperties setTextStyle =
                new Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlTextProperties();
            setTextStyle.Style = editor.Styles.FindByName("RedStyle");
            documentBody.FindText("RedStyle").SetTextProperties(setTextStyle);
    
            // save changed document to a DOCX file
            editor.Save(outFilename);
    
            // export changed document to a PDF document
            editor.Export(outPdfFilename);
        }
    }
    
    /// <summary>
    /// Creates the color text properties.
    /// </summary>
    /// <param name="color">The color.</param>
    private static Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlTextProperties CreateColorTextProperties(System.Drawing.Color color)
    {
        Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlTextProperties result =
            new Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlTextProperties();
        result.Color = color;
        return result;
    }
    
    Public Shared Sub DocxChangeTextPropertiesExample()
        Dim templateFilename As String = "ChangeTextProperties_template.docx"
        Dim outFilename As String = "ChangeTextProperties.docx"
        Dim outPdfFilename As String = "ChangeTextProperties.pdf"
    
        ' create DocxDocumentEditor that allows to edit file "ChangeTextProperties_template.docx"
        Using editor As New Vintasoft.Imaging.Office.OpenXml.Editor.Docx.DocxDocumentEditor(templateFilename)
            ' get document body
            Dim documentBody As Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlDocumentElement = editor.Body
    
            ' set text color
            documentBody.FindText("COLOR").Substring(0, 2).SetTextProperties(CreateColorTextProperties(System.Drawing.Color.Red))
            documentBody.FindText("COLOR").Substring(2, 1).SetTextProperties(CreateColorTextProperties(System.Drawing.Color.Green))
            documentBody.FindText("COLOR").Substring(3, 2).SetTextProperties(CreateColorTextProperties(System.Drawing.Color.Blue))
    
            ' highlight text
            Dim highlightedTextProperties As New Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlTextProperties()
            highlightedTextProperties.Highlight = Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlTextHighlightType.Green
            documentBody.FindText("highlighted text").SetTextProperties(highlightedTextProperties)
    
            ' set text "bold text" as bold text
            documentBody.FindText("bold text").SetTextProperties(Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlTextProperties.BoldText)
    
            ' set text "italic text" as italic text
            documentBody.FindText("italic text").SetTextProperties(Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlTextProperties.ItalicText)
    
            ' set text "underline text" as underline text
            documentBody.FindText("underline text").SetTextProperties(Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlTextProperties.UnderlineText)
    
            ' set text "strike text" as striked out text
            documentBody.FindText("strike text").SetTextProperties(Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlTextProperties.StrikeText)
    
            ' change font size
            Dim setTextSize As New Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlTextProperties()
            setTextSize.FontSize = 16
            documentBody.FindText("text with size 16pt").Substring(0, 4).SetTextProperties(setTextSize)
    
            ' change text style
            Dim setTextStyle As New Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlTextProperties()
            setTextStyle.Style = editor.Styles.FindByName("RedStyle")
            documentBody.FindText("RedStyle").SetTextProperties(setTextStyle)
    
            ' save changed document to a DOCX file
            editor.Save(outFilename)
    
            ' export changed document to a PDF document
            editor.Export(outPdfFilename)
        End Using
    End Sub
    
    ''' <summary>
    ''' Creates the color text properties.
    ''' </summary>
    ''' <param name="color">The color.</param>
    Private Shared Function CreateColorTextProperties(color As System.Drawing.Color) As Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlTextProperties
        Dim result As New Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlTextProperties()
        result.Color = color
        Return result
    End Function
    



    OpenXmlDocumentTable class

    OpenXmlDocumentTable represents the table of DOCX or XLSX document and allows to:

    OpenXmlDocumentTableRow class

    OpenXmlDocumentTableRow represents the row of DOCX or XLSX table and allows to:

    OpenXmlDocumentTableCell class

    OpenXmlDocumentTableCell represents the cell of DOCX or XLSX table and allows to:
    Here is C#/VB.NET code that shows how to fill data table (example uses template document CopyTableRow_template.docx):
    public static void DocxCopyTableRowExample()
    {
        string templateFilename = "CopyTableRow_template.docx";
        string outFilename = "CopyTableRow.docx";
        string outPdfFilename = "CopyTableRow.pdf";
    
        // create DocxDocumentEditor that allows to edit file "CopyTableRow_template.docx"
        using (Vintasoft.Imaging.Office.OpenXml.Editor.Docx.DocxDocumentEditor editor =
            new Vintasoft.Imaging.Office.OpenXml.Editor.Docx.DocxDocumentEditor(templateFilename))
        {
            // get document body
            Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlDocumentElement documentBody = editor.Body;
    
            // get the first table
            Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlDocumentTable table = editor.Tables[0];
            // get the second table that contains template row
            Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlDocumentTableRow templateRow = table[1];
            
            // create an array that contains colors
            System.Drawing.Color[] colors = new System.Drawing.Color[] {
                System.Drawing.Color.Red,
                System.Drawing.Color.Green,
                System.Drawing.Color.Blue,
                System.Drawing.Color.Orange,
                System.Drawing.Color.Yellow
            };
            // for each color
            for (int i = 0; i < colors.Length; i++)
            {
                // insert copy of template row before template row
                Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlDocumentTableRow rowCopy =
                    (Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlDocumentTableRow)templateRow.InsertCopyBeforeSelf();
    
                // set row data
                rowCopy[0].Text = string.Format("Copy {0} ({1})", i, colors[i]);
                rowCopy["[cell1]"] = string.Format("cell data {0}", i);
    
                // set cell colors
                rowCopy[1].SetFillColor(colors[i]);
                rowCopy[2].SetFillColor(colors[i]);
    
                // if color has odd index in colors array
                if ((i % 2) == 1)
                {
                    // set row height to 10mm
                    rowCopy.Height = Vintasoft.Imaging.Utils.UnitOfMeasureConverter.ConvertToPoints(10, Vintasoft.Imaging.UnitOfMeasure.Millimeters);
                }
            }
    
            // remove template row
            templateRow.Remove();
    
            // save changed document to a DOCX file
            editor.Save(outFilename);
    
            // export changed document to a PDF document
            editor.Export(outPdfFilename);
        }
    }
    
    Public Shared Sub DocxCopyTableRowExample()
        Dim templateFilename As String = "CopyTableRow_template.docx"
        Dim outFilename As String = "CopyTableRow.docx"
        Dim outPdfFilename As String = "CopyTableRow.pdf"
    
        ' create DocxDocumentEditor that allows to edit file "CopyTableRow_template.docx"
        Using editor As New Vintasoft.Imaging.Office.OpenXml.Editor.Docx.DocxDocumentEditor(templateFilename)
            ' get document body
            Dim documentBody As Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlDocumentElement = editor.Body
    
            ' get the first table
            Dim table As Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlDocumentTable = editor.Tables(0)
            ' get the second table that contains template row
            Dim templateRow As Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlDocumentTableRow = table(1)
    
            ' create an array that contains colors
            Dim colors As System.Drawing.Color() = New System.Drawing.Color() {System.Drawing.Color.Red, System.Drawing.Color.Green, System.Drawing.Color.Blue, System.Drawing.Color.Orange, System.Drawing.Color.Yellow}
            ' for each color
            For i As Integer = 0 To colors.Length - 1
                ' insert copy of template row before template row
                Dim rowCopy As Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlDocumentTableRow = DirectCast(templateRow.InsertCopyBeforeSelf(), Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlDocumentTableRow)
    
                ' set row data
                rowCopy(0).Text = String.Format("Copy {0} ({1})", i, colors(i))
                rowCopy("[cell1]") = String.Format("cell data {0}", i)
    
                ' set cell colors
                rowCopy(1).SetFillColor(colors(i))
                rowCopy(2).SetFillColor(colors(i))
    
                ' if color has odd index in colors array
                If (i Mod 2) = 1 Then
                    ' set row height to 10mm
                    rowCopy.Height = Vintasoft.Imaging.Utils.UnitOfMeasureConverter.ConvertToPoints(10, Vintasoft.Imaging.UnitOfMeasure.Millimeters)
                End If
            Next
    
            ' remove template row
            templateRow.Remove()
    
            ' save changed document to a DOCX file
            editor.Save(outFilename)
    
            ' export changed document to a PDF document
            editor.Export(outPdfFilename)
        End Using
    End Sub
    



    Here is C#/VB.NET code that shows how to set table borders from sample table cell (example uses template document SetTableBorders_template.docx):
    public static void DocxSetTableBordersExample()
    {
        string templateFilename = "SetTableBorders_template.docx";
        string outFilename = "SetTableBorders.docx";
        string outPdfFilename = "SetTableBorders.pdf";
    
        // create DocxDocumentEditor that allows to edit file "SetTableBorders_template.docx"
        using (Vintasoft.Imaging.Office.OpenXml.Editor.Docx.DocxDocumentEditor editor =
            new Vintasoft.Imaging.Office.OpenXml.Editor.Docx.DocxDocumentEditor(templateFilename))
        {
            // get cell border templates
            Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlDocumentTable bordersTemplateTable =
                editor.Tables[0];
            Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlDocumentTableCell boldBorderTemplate =
                bordersTemplateTable.FindCell("[bold]");
            Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlDocumentTableCell colorBorderTemplate =
                bordersTemplateTable.FindCell("[color]");
    
            // remove border template table
            bordersTemplateTable.Remove();
    
            // get test table
            Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlDocumentTable table = editor.Tables[0];
    
            // set borders from template cells
            table.FindRow("[bold_row]").SetBorder(boldBorderTemplate);
            table.FindCell("[bold_cell]").SetBorder(boldBorderTemplate);
            table.FindRow("[color_row]").SetBorder(colorBorderTemplate);
            table.FindCell("[color_cell]").SetBorder(colorBorderTemplate);
    
            // set outside border inside table
            table.SetOutsideBorder(table.FindCell("[bold_first]"), table.FindCell("[bold_last]"), boldBorderTemplate);
    
            // save changed document to a DOCX file
            editor.Save(outFilename);
    
            // export changed document to a PDF document
            editor.Export(outPdfFilename);
        }
    }
    
    Public Shared Sub DocxSetTableBordersExample()
        Dim templateFilename As String = "SetTableBorders_template.docx"
        Dim outFilename As String = "SetTableBorders.docx"
        Dim outPdfFilename As String = "SetTableBorders.pdf"
    
        ' create DocxDocumentEditor that allows to edit file "SetTableBorders_template.docx"
        Using editor As New Vintasoft.Imaging.Office.OpenXml.Editor.Docx.DocxDocumentEditor(templateFilename)
            ' get cell border templates
            Dim bordersTemplateTable As Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlDocumentTable = editor.Tables(0)
            Dim boldBorderTemplate As Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlDocumentTableCell = bordersTemplateTable.FindCell("[bold]")
            Dim colorBorderTemplate As Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlDocumentTableCell = bordersTemplateTable.FindCell("[color]")
    
            ' remove border template table
            bordersTemplateTable.Remove()
    
            ' get test table
            Dim table As Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlDocumentTable = editor.Tables(0)
    
            ' set borders from template cells
            table.FindRow("[bold_row]").SetBorder(boldBorderTemplate)
            table.FindCell("[bold_cell]").SetBorder(boldBorderTemplate)
            table.FindRow("[color_row]").SetBorder(colorBorderTemplate)
            table.FindCell("[color_cell]").SetBorder(colorBorderTemplate)
    
            ' set outside border inside table
            table.SetOutsideBorder(table.FindCell("[bold_first]"), table.FindCell("[bold_last]"), boldBorderTemplate)
    
            ' save changed document to a DOCX file
            editor.Save(outFilename)
    
            ' export changed document to a PDF document
            editor.Export(outPdfFilename)
        End Using
    End Sub
    



    OpenXmlDocumentImage class

    OpenXmlDocumentImage represents an image of DOCX or XLSX document:
    Here is C#/VB.NET code that shows how to set barcode image in DOCX document (example uses template document SetBarcodeImage_template.docx):
    public static void DocxSetBarcodeImageExample()
    {
        string templateFilename = "SetBarcodeImage_template.docx";
        string outFilename = "SetBarcodeImage.docx";
        string outPdfFilename = "SetBarcodeImage.pdf";
    
        // create DocxDocumentEditor that allows to edit file "SetBarcodeImage_template.docx"
        using (Vintasoft.Imaging.Office.OpenXml.Editor.Docx.DocxDocumentEditor editor =
            new Vintasoft.Imaging.Office.OpenXml.Editor.Docx.DocxDocumentEditor(templateFilename))
        {
            // get document body
            Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlDocumentElement documentBody = editor.Body;
    
            // find text content "Invoice number:"
            Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlTextContent textContent = documentBody.FindText("Invoice number:");
    
            // get barcode value as text of next paragraph after "Invoice number:"
            string barcodeValue = textContent.FindAfter<Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlDocumentParagraph>().Text;
            barcodeValue = barcodeValue.TrimEnd('\n');
    
            // create and setup barcode generator
            Vintasoft.Barcode.BarcodeWriter barcodeGenerator = new Vintasoft.Barcode.BarcodeWriter();
            barcodeGenerator.Settings.Barcode = Vintasoft.Barcode.BarcodeType.QR;
            barcodeGenerator.Settings.SetWidth(200);
            barcodeGenerator.Settings.Value = barcodeValue;
    
            // generate barcode image
            using (Vintasoft.Imaging.VintasoftImage barcodeImage = 
                new Vintasoft.Imaging.VintasoftImage(barcodeGenerator.GetBarcodeAsVintasoftBitmap(), true))
            {
                // crop barcode to rectangular image
                barcodeImage.Crop(new System.Drawing.Rectangle(0, 0, barcodeImage.Width, barcodeImage.Width));
    
                // set barcode image to DOCX image at index 0
                editor.Images[0].SetImage(barcodeImage);
            }
    
            // save changed document to a DOCX file
            editor.Save(outFilename);
    
            // export changed document to a PDF document
            editor.Export(outPdfFilename);
        }
    }
    
    Public Shared Sub DocxSetBarcodeImageExample()
        Dim templateFilename As String = "SetBarcodeImage_template.docx"
        Dim outFilename As String = "SetBarcodeImage.docx"
        Dim outPdfFilename As String = "SetBarcodeImage.pdf"
    
        ' create DocxDocumentEditor that allows to edit file "SetBarcodeImage_template.docx"
        Using editor As New Vintasoft.Imaging.Office.OpenXml.Editor.Docx.DocxDocumentEditor(templateFilename)
            ' get document body
            Dim documentBody As Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlDocumentElement = editor.Body
    
            ' find text content "Invoice number:"
            Dim textContent As Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlTextContent = documentBody.FindText("Invoice number:")
    
            ' get barcode value as text of next paragraph after "Invoice number:"
            Dim barcodeValue As String = textContent.FindAfter(Of Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlDocumentParagraph)().Text
            barcodeValue = barcodeValue.TrimEnd(ControlChars.Lf)
    
            ' create and setup barcode generator
            Dim barcodeGenerator As New Vintasoft.Barcode.BarcodeWriter()
            barcodeGenerator.Settings.Barcode = Vintasoft.Barcode.BarcodeType.QR
            barcodeGenerator.Settings.SetWidth(200)
            barcodeGenerator.Settings.Value = barcodeValue
    
            ' generate barcode image
            Using barcodeImage As New Vintasoft.Imaging.VintasoftImage(barcodeGenerator.GetBarcodeAsVintasoftBitmap(), True)
                ' crop barcode to rectangular image
                barcodeImage.Crop(New System.Drawing.Rectangle(0, 0, barcodeImage.Width, barcodeImage.Width))
    
                ' set barcode image to DOCX image at index 0
                editor.Images(0).SetImage(barcodeImage)
            End Using
    
            ' save changed document to a DOCX file
            editor.Save(outFilename)
    
            ' export changed document to a PDF document
            editor.Export(outPdfFilename)
        End Using
    End Sub
    



    OpenXmlDocumentChart class

    OpenXmlDocumentChart represents a chart of DOCX or XLSX document:
    Here is C#/VB.NET code that shows how to create DOCX file with chart (example uses template document Chart.docx):
    /// <summary>
    /// Creates the DOCX document with chart.
    /// </summary>
    /// <param name="resultFilePath">The result file path.</param>
    public static void CreateDocxWithChart(string resultFilePath)
    {
        // path to a template DOCX document with chart
        string templateDocDocumentPath = "Chart.docx";
    
        // create DOCX document editor on template document with chart
        using (Vintasoft.Imaging.Office.OpenXml.Editor.Docx.DocxDocumentEditor docxDocumentEditor =
            new Vintasoft.Imaging.Office.OpenXml.Editor.Docx.DocxDocumentEditor(templateDocDocumentPath))
        {
            // get chart
            Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlDocumentChart chart = docxDocumentEditor.Charts[0];
    
    
            // change chart title
    
            // find title
            chart.Title = "Chart Title Example. " + System.DateTime.Now.ToShortDateString();
    
    
            // change chart data
    
            // create the chart data
            double?[,] chartData = new double?[,] {
                 { 55, 32, 23 },
                 { 84, 48, 33 },
                 { 72, 53, 86 },
                 { 34, 82, 11 } };
            // change the chart data
            chart.ChartData.SetData(chartData);
    
    
            // save changes
            docxDocumentEditor.Save(resultFilePath);
        }
    }
    
    ''' <summary>
    ''' Creates the DOCX document with chart.
    ''' </summary>
    ''' <param name="resultFilePath">The result file path.</param>
    Public Shared Sub CreateDocxWithChart(resultFilePath As String)
        ' path to a template DOCX document with chart
        Dim templateDocDocumentPath As String = "Chart.docx"
    
        ' create DOCX document editor on template document with chart
        Using docxDocumentEditor As New Vintasoft.Imaging.Office.OpenXml.Editor.Docx.DocxDocumentEditor(templateDocDocumentPath)
            ' get chart
            Dim chart As Vintasoft.Imaging.Office.OpenXml.Editor.OpenXmlDocumentChart = docxDocumentEditor.Charts(0)
    
    
            ' change chart title
    
            ' find title
            chart.Title = "Chart Title Example. " & System.DateTime.Now.ToShortDateString()
    
    
            ' change chart data
    
            ' create the chart data
            Dim chartData As System.Nullable(Of Double)(,) = New System.Nullable(Of Double)(,) {{55, 32, 23}, {84, 48, 33}, {72, 53, 86}, {34, 82, 11}}
            ' change the chart data
            chart.ChartData.SetData(chartData)
    
    
            ' save changes
            docxDocumentEditor.Save(resultFilePath)
        End Using
    End Sub