Support FAQs

Here you can find the list of functions supported by our components and please check the related products for the detailed information. Every page contains short descriptions of some features. If you cannot find the information you want, please contact us on support@e-iceblue.com to Request free customized demo just for you.

For technical questions while using our components, please contact us on support@e-iceblue.com. Please list the below information in your message, it may help us to reproduce your issue quickly and offer the solution to you.

  • Guideline

    Dll file list (name + version)

    for example:
    • Spire.Doc.dll v4.9.32.3040
    • Spire.License.dll v4.9.32.3040
    • Spire.Pdf.dll v2.8.86.3040

    Operation System

    for example:
    • Windows 7 Enterprise Edition SP1 x64
    • Regional and Language Options

    Project can reproduce the issue

    All code about this problem, a simple project which can reproduce this problem will be better.

    Test Document or Test data

    Please provide your test document to us if convenient, it may help us reproduce your issue quickly. We promise to keep your document confidential and we will not use it for any other purpose. Besides, you could also remove the security data of your document and then send it to us.

  • Spire.Doc
    How to get text from word document?
    A : You can call the method method document.GetText() to do so. Full code:
    Document document = new Document();
    document.LoadFromFile(@"..\..\test.docx");
    using (StreamWriter sw = File.CreateText("output.txt"))
     {
     sw.Write(document.GetText());
     }
    
    How to insert an image with specified height and width?
    A : You can set the properties height and width of DocPicture to resize the image. Full code:
    Document document = new Document();
    document.LoadFromFile("sample.docx", FileFormat.Docx);
    Image image = Image.FromFile("image.jpg");
    
    //specify the paragraph
    Paragraph paragraph = document.Sections[0].Paragraphs[2];
    DocPicture picture = paragraph.AppendPicture(image);
    
    //resize the image
    picture.Height = picture.Height * 0.8f;
    picture.Width = picture.Width * 0.8f;
    document.SaveToFile("result.docx", FileFormat.Docx);
    
    How to align text in word document?
    A : Please set the property HorizontalAlignment of the paragraph to align text. Full code:
    Document document = new Document();
    document.LoadFromFile("sample.docx");
    
    //set paragraph1 to align left
    Paragraph paragraph1 = document.Sections[0].Paragraphs[0];
    paragraph1.Format.HorizontalAlignment = HorizontalAlignment.Left;
    
    //set paragraph2 to align center
    Paragraph paragraph2 = document.Sections[0].Paragraphs[1];
    paragraph2.Format.HorizontalAlignment = HorizontalAlignment.Center;
    
    //set paragraph3 to align right
    Paragraph paragraph3 = document.Sections[0].Paragraphs[2];
    paragraph3.Format.HorizontalAlignment = HorizontalAlignment.Right;
    document.SaveToFile("result.docx");
    
    How to change text on existing bookmarks?
    A : You can use BookmarksNavigator to locate the specified bookmark. Then please call the method ReplaceBookmarkContent to replace text on bookmarks. Full code:
    Document document = new Document();
    document.LoadFromFile("sample.doc");
    BookmarksNavigator bookmarkNavigator = new BookmarksNavigator(document);
    bookmarkNavigator.MoveToBookmark("mybookmark");
    
    //replace text on bookmarks
    bookmarkNavigator.ReplaceBookmarkContent("new context", false);
    document.SaveToFile("result.doc", FileFormat.Doc);
    
    How to convert word to html?
    A : You can just call the method SaveToFile with specified file format HTML to convert word document to html. Full code:
    Document document = new Document();
    document.LoadFromFile("sample.doc");
    
    //save word document as html file
    document.SaveToFile("result.html", FileFormat.Html);
    document.Close();
    
    How to convert html to word document?
    A : Please call the method LoadFromFile to load html file. Then call the method SaveToFile to convert html to word document. Full code:
    Document document = new Document();
    
    document.LoadFromFile("sample.html", FileFormat.Html, XHTMLValidationType.None);
    //save html as word document
    document.SaveToFile("result.doc");
    document.Close();
    
    How to convert word2007 to word2003?
    A : Just call the method SaveToFile with specified file format doc to convert word2007 to word2003. Full code:
    Document document = new Document("word2007.docx");
    
    //convert word2007 to word2003
    document.SaveToFile("word2003.doc", FileFormat.Doc);
    document.Close();
    
    How to replace and delete header or footer in word document?
    A : Please use Section to get header or footer. And you can call the method Replace to replace header and call the method Clear to remove the headers or footers of the word document.
    Document document = new Document();
    Section section = document.AddSection();
    
    //add a header
    HeaderFooter header = section.HeadersFooters.Header;
    Paragraph headerParagraph = header.AddParagraph();
    TextRange text = headerParagraph.AppendText("Demo of Spire.Doc");
    text.CharacterFormat.TextColor = Color.Blue;
    document.SaveToFile("DocWithHeader.doc");
    
    //replace the header
    headerParagraph.Replace("Demo", "replaceText", true, true);
    document.SaveToFile("DocHeaderReplace.doc");
    document.LoadFromFile("DocWithHeader.doc");
    
    //delete the heater
    document.Sections[0].HeadersFooters.Header.Paragraphs.Clear();
    document.SaveToFile("DocHeaderDelete.doc");
    
    How to merge word documents?
    A : Please call the method Clone to copy a section. Then call the method Add to add the copy of the section to specified document. Full code:
    Document document1 = new Document();
    document1.LoadFromFile("merge1.docx");
    Document document2 = new Document();
    document2.LoadFromFile("merge2.docx");
    
    //add sections from document1 to document2
    foreach (Section sec in document2.Sections)
    {
        document1.Sections.Add(sec.Clone());
    }
    document1.SaveToFile("result.docx");
    
    How to traverse the cells of a table in a word document?
    A : Rows is the collection of rows in a table and Cells is the collection of cells in a row. So you can traverse cells of a table using two loops. Full code:
    Document document = new Document();
    document.LoadFromFile("sample.docx");
    Spire.Doc.Interface.ITable table = document.Sections[0].Tables[0];
    int i=0;
    
    //traverse the cells
    foreach (TableRow row in table.Rows)
    {
        foreach (TableCell cell in row.Cells)
        {
            i++;
        }
    }
    
    How to set text with shadow?
    A : You just need to set the property IsShadow of TextRange. Full code:
    Document document = new Document();
    Section section = document.AddSection();
    Paragraph paragraph = section.AddParagraph();
    TextRange HText = paragraph.AppendText("this is a test!");
    
    //set the property IsShadow
    HText.CharacterFormat.IsShadow = true;
    HText.CharacterFormat.FontSize = 80;
    document.SaveToFile("result.doc");
    
    How to insert line numbers in the Word?
    A : You need to set the properties LineNumberingRestartMode, LineNumberingStep, LineNumberingStartValue of the section to insert line numbers in word document. Full code:
    Document document = new Document();
    Section section = document.AddSection();
    
    //insert line numbers
    section.PageSetup.LineNumberingRestartMode = LineNumberingRestartMode.RestartPage;
    section.PageSetup.LineNumberingStep = 1;
    section.PageSetup.LineNumberingStartValue = 1;
    Paragraph paragraph = section.AddParagraph();
    paragraph.AppendText("As an independent Word .NET component, Spire.Doc for .NET doesn't need Microsoft Word to be installed on the machine. However, it can incorporate Microsoft Word document creation capabilities into any developers .NET applications.");
    document.SaveToFile("result.doc");
    
    How to Make Text around image?
    A : You need to set the properties TextWrappingStyle and ShapeHorizontalAlignment of the picture. Full code:
    Document document = new Document();
    Section section = document.AddSection();
    Paragraph paragraph = section.AddParagraph();
    string str = "As an independent Word .NET component, Spire.Doc for .NET doesn't need Microsoft Word to be installed on the machine. However, it can incorporate Microsoft Word document creation capabilities into any developers.NET applications.As an independent Word .NET component, Spire.Doc for .NET doesn't need Microsoft Word to be installed on the machine. However, it can incorporate Microsoft Word document creation capabilities into any developers’.NET applications.";
    paragraph.AppendText(str);
    DocPicture picture = paragraph.AppendPicture(Image.FromFile("logo.png"));
    picture.TextWrappingStyle = TextWrappingStyle.Tight;
    picture.HorizontalAlignment = ShapeHorizontalAlignment.Center;
    document.SaveToFile("result.doc");
    
    How to edit existing table in word document?
    A : Use Section to get the table and you can edit the text in a cell and you can insert new row into the table. Full code:
    Document doc = new Document("sample.docx");
    Section section = doc.Sections[0];
    ITable table = section.Tables[0];
    
    //edit text in a cell
    TableCell cell1 = table.Rows[1].Cells[1];
    Paragraph p1 = cell1.Paragraphs[0];
    p1.Text = "abc";
    
    TableCell cell2 = table.Rows[1].Cells[2];
    Paragraph p2 = cell2.Paragraphs[0];
    p2.Items.Clear();
    p2.AppendText("def");
    
    TableCell cell3 = table.Rows[1].Cells[3];
    Paragraph p3 = cell3.Paragraphs[0];
    (p3.Items[0] as TextRange).Text = "hij";
    
    //insert new row
    TableRow newRow = table.AddRow(true, true);
    foreach (TableCell cell in newRow.Cells)
    {
        cell.AddParagraph().AppendText("new row");
    }
    doc.SaveToFile("result.doc");
    
    How to set the format of hyperlink with no underline?
    A : Please set the textRange node of Hyperlink field to format hyperlink. Full code:
    Document document = new Document();
    Section section = document.AddSection();
    Paragraph paragraph = section.AddParagraph();
    Field hyperlink = paragraph.AppendHyperlink("www.e-iceblue.com", "www.e-iceblue.com", HyperlinkType.WebLink);
    TextRange text = hyperlink.NextSibling.NextSibling as TextRange;
    text.CharacterFormat.Bold = true;
    text.CharacterFormat.UnderlineStyle = UnderlineStyle.None;
    document.SaveToFile("result.doc");
    
    How to set word document read-only?
    A : Please call the method Protect to set the ProtectionType. Full code:
    Document document = new Document();
    document.LoadFromFile("sample.docx");
    document.Protect(ProtectionType.AllowOnlyReading);
    document.SaveToFile("result.doc");
    
  • Spire.XLS
    How to add an Image into Excel?
    A : Please call the method Add to add an image into a worksheet of Excel file. Full code:
    Workbook workbook = new Workbook();
    Worksheet sheet = workbook.Worksheets[0];
    
    //insert the picture day.jpg into the sheet and place it in the cell "B3"
    sheet.Pictures.Add(3, 2, "day.jpg");
    workbook.SaveToFile("result.xlsx");
    
    How to Insert a new Row into a worksheet of a Excel file?
    A : Please call the method InsertRow to add a new row into a worksheet of Excel fils. Full code:
    Workbook workbook = new Workbook();
    workbook.LoadFromFile("sample.xlsx");
    Worksheet sheet = workbook.Worksheets[0];
    
    //add a new row in the third row
    sheet.InsertRow(3);
    workbook.SaveToFile("result.xlsx");
    
    How to set print area in XLS?
    A : You can set the PrintArea property of the worksheet to do so. Full code:
    Workbook workbook = new Workbook();
    workbook.LoadFromFile("sample.xlsx");
    Worksheet sheet = workbook.Worksheets[0];
    
    //set print area from cell "B2" to cell "F8"
    sheet.PageSetup.PrintArea = "B2:F8";
    workbook.SaveToFile("result.xlsx");
    
    How to Copy Cells with formatting?
    A : Spire.XLS provides you a method called Copy to copy cells with formatting. Full code:
    Workbook workbook = new Workbook();
    workbook.LoadFromFile("sample.xlsx");
    Worksheet sheet1 = workbook.Worksheets[0];
    Worksheet sheet3 = workbook.Worksheets[2];
    
    //copy cell "B2" in sheet1 to cell "C6" in sheet3
    sheet1.Range[3, 2].Copy(sheet3.Range[6,3]);
    workbook.SaveToFile("result.xlsx");
    
    How to Convert XLS to PDF?
    A : First you need to add reference Spire.Pdf and Spire.Common to your project. Then creat an instance of PdfDocument and a PDF converter object . At last, call the method Convert to convert XLS to PDF. Full code:
    Workbook workbook = new Workbook();
    workbook.LoadFromFile("sample.xlsx");
    PdfConverter pdfConverter = new PdfConverter(workbook);
    PdfDocument pdfDocument = new PdfDocument();
    
    //settings of result PDF docement
    pdfDocument.PageSettings.Orientation = PdfPageOrientation.Landscape;
    pdfDocument.PageSettings.Width = 970;
    pdfDocument.PageSettings.Height = 850;
    PdfConverterSettings settings = new PdfConverterSettings();
    settings.TemplateDocument = pdfDocument;
    
    //convert XLS to PDF using PdfConverter
    pdfDocument = pdfConverter.Convert(settings);
    pdfDocument.SaveToFile("result.pdf");
    
    How to merge cells in XLS?
    A : Spire.XLS provides you a method called Merge to merge cells in XLS. Full code:
    Workbook workbook = new Workbook();
    workbook.LoadFromFile("sample.xlsx");
    Worksheet sheet = workbook.Worksheets[0];
    
    //merges cells "B3" "B4"
    sheet.Range["B3:B4"].Merge();
    workbook.SaveToFile("result.xlsx");
    
    How to rearrange the worksheets in XLS file?
    A : Spire.XLS provides you a method called MoveWorksheet to rearrange the worksheets in XLS file? Full code:
    Workbook workbook = new Workbook();
    workbook.LoadFromFile("sample.xlsx");
    Worksheet sheet = workbook.Worksheets[3];
    
    //move the fourth worksheet sheet to the first position of the worksheets
    sheet.MoveWorksheet(0);
    workbook.SaveToFile("result.xlsx");
    
    How to delete columns in excel worksheet?
    A : Spire.XLS provides you a method called DeleteColumn to delete columns. This method affect the order of the collection of worksheet immediately. Full code:
    Workbook workbook = new Workbook();
    workbook.LoadFromFile("sample.xlsx");
    
    Worksheet sheet = workbook.Worksheets[1];
    //delete the second column
    sheet.DeleteColumn(2);
    
    //delete the fourth column
    sheet.DeleteColumn(3);
    workbook.SaveToFile("result.xlsx");
    
    How to set number format in specified range in XLS?
    A : You can use the property NumberFormat of the destination cell to format the NumberValue of cellrange. Full code:
    Workbook workbook = new Workbook();
    workbook.LoadFromFile("sample.xlsx");
    Worksheet sheet = workbook.Worksheets[0];
    
    //set number format in specified range
    sheet.Range[2, 2, 6, 6].NumberFormat = "$#,##0.00";
    sheet.Range["C3"].NumberValue = 3240.689;
    sheet.Range["D4"].NumberValue = 5230.123;
    workbook.SaveToFile("result.xlsx");
    
    How to add a formula to a cell?
    A : Just set the Formula property of the cell to add a formula. Full code:
    Workbook workbook = new Workbook();
    Worksheet worksheet = workbook.Worksheets[0];
    
    //add formula =IF(H7>0,(IF(F7 > 0,(H7-F7)/F7,"""")),"""") to cell "J7"
    string formula = @"=IF(H7>0,(IF(F7 > 0,(H7-F7)/F7,"""")),"""")";
    worksheet.Range["J7"].Formula = formula;
    worksheet.Range["F7"].NumberValue = 5;
    worksheet.Range["H7"].NumberValue = 4;
    workbook.SaveToFile("result.xlsx", ExcelVersion.Version2007);
    
    How to merge multiple workbooks?
    A : Spire.XLS provides you a method called AddCopy to merge Excel files. Full code:
    Workbook workbook = new Workbook();
    workbook.LoadFromFile("sample1.xlsx");
    Workbook workbookDest = new Workbook();
    workbookDest.LoadFromFile("sample2.xlsx");
    
    //merge workbook with workbookDest
    workbookDest.Worksheets.AddCopy(workbook.Worksheets);
    workbookDest.SaveToFile("result.xlsx");
    
  • Spire.PDF
    How to convert HTML code to PDF?
    A : Spire.PDF cannot load a string containing html code. But Spire.Doc can load that and Spire.Doc supports PDF format. So you can use Spire.Doc to do the job. Full code:
    string htmlstring = "<!DOCTYPE html><html><body><h1>Header 1</h1><p>First paragraph</p></body></html>";
    Document doc = new Document();
    Section sec = doc.AddSection();
    Paragraph para = sec.AddParagraph();
    
    //add html code to document
    para.AppendHTML(htmlstring);
    
    //save document as PDF format
    doc.SaveToFile("result.pdf", FileFormat.PDF);
    
    How to embed another table in a cell of a table?
    A : Table is a simpler grid. In grid, you can manipulate each cell, set different style for each cell and embed another grid. So you can use grid to do the job. Full code:
    PdfDocument document = new PdfDocument();
    PdfPageBase page = document.Pages.Add(PdfPageSize.A4);
    
    PdfGrid grid = new PdfGrid();
    grid.Columns.Add(1);
    grid.Columns[0].Width = page.Canvas.ClientSize.Width;
    PdfGridRow row0 = grid.Rows.Add();
    row0.Cells[0].Value = "This is the first row.";
    row0.Cells[0].StringFormat = new PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle);
    PdfGridRow row1 = grid.Rows.Add();
    PdfLayoutResult result=grid.Draw(page, new PointF(0, 20));
    
    PdfGrid grid2 = new PdfGrid();
    grid2.Columns.Add(2);
    PdfGridRow newrow = grid2.Rows.Add();
    grid2.Columns[0].Width = grid.Columns[0].Width / 2;
    grid2.Columns[1].Width = grid.Columns[0].Width / 2;
    newrow.Cells[0].Value = "This is row two column one.";
    newrow.Cells[0].StringFormat = new PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle);
    newrow.Cells[1].Value = "This is row two column two.";
    newrow.Cells[1].StringFormat = new PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle);
    
    //assign grid2 to row1
    row1.Cells[0].Value = grid2;
    
    //drwa grid2
    result = grid2.Draw(page, new PointF(0, result.Bounds.Location.Y + result.Bounds.Height));
    document.SaveToFile("result.pdf");
    
    How to merge cells in grid?
    A : Spire.PDF provides you properties called RowSpan and ColumnSpan to merge cells. Full code:
    PdfDocument doc = new PdfDocument();
    PdfPageBase page = doc.Pages.Add();
    
    PdfGrid grid = new PdfGrid();
    grid.Columns.Add(5);
    float width = page.Canvas.ClientSize.Width - (grid.Columns.Count + 1);
    for (int i = 0; i < grid.Columns.Count; i++)
    {
        grid.Columns[i].Width = width * 0.20f;
    }
    PdfGridRow row0 = grid.Rows.Add();
    PdfGridRow row1 = grid.Rows.Add();
    
    row0.Style.Font = new PdfTrueTypeFont(new Font("Arial", 16f, FontStyle.Bold), true);
    row1.Style.Font = new PdfTrueTypeFont(new Font("Arial", 16f, FontStyle.Italic), true);
    
    row0.Cells[0].Value = "Corporation";
    
    //merge with the downside cell
    row0.Cells[0].RowSpan = 2;
    
    row0.Cells[1].Value = "B&K Undersea Photo";
    row0.Cells[1].StringFormat = new PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle);
    
    //merge with the right cell
    row0.Cells[1].ColumnSpan = 3;
    
    row0.Cells[4].Value = "World";
    row0.Cells[4].Style.Font = new PdfTrueTypeFont(new Font("Arial", 10f, FontStyle.Bold | FontStyle.Italic), true);
    row0.Cells[4].StringFormat = new PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle);
    row0.Cells[4].Style.BackgroundBrush = PdfBrushes.LightGreen;
    
    row1.Cells[1].Value = "Diving International Unlimited";
    row1.Cells[1].StringFormat = new PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle);
    row1.Cells[1].ColumnSpan = 4;
    
    grid.Draw(page, new PointF(0, 0));
    
    doc.SaveToFile("result.pdf");
    
    How to add signature to a PDF file?
    A : First, create a certificate instance using class PdfCertificate. The certificate instance will be used in creating a PdfSignature instance. Then create a signature instance using class PdfSignature. And you need to set the properties of the signature instance. Full code:
    PdfDocument doc = new PdfDocument();
    doc.LoadFromFile("sample.pdf");
    PdfCertificate cert = new PdfCertificate("Demo.pfx", "e-iceblue");
    
    //add signature to every page of PDF file
    foreach (PdfPageBase page in doc.Pages)
    {
        PdfSignature signature = new PdfSignature(page.Document, page, cert, "demo");
        signature.ContactInfo = "Harry";
        signature.Certificated = true;
        signature.DocumentPermissions = PdfCertificationFlags.AllowFormFill;
    }
    
    doc.SaveToFile("result.pdf");
    
    How to rearrange the pages of a PDF file?
    A : Please call the method ReArrange. The method takes an int array as parameter. The int array represents the new order of the pages. Full code:
    PdfDocument document = new PdfDocument();
    
    //sample.pdf has four pages
    document.LoadFromFile("sample.pdf");
    
    //rearrange the pages of the PDF file
    int[] range = new int[] { 0, 2, 1, 3 };
    document.Pages.ReArrange(range);
    document.SaveToFile("result.pdf");
    
    How to add image watermark?
    A : Spire.PDF don't support image watermark directly. But you can set an image as BackgroundImage. If the image is big enough, the BackgroundImage will be like image watermark. Full code:
    PdfDocument document = new PdfDocument();
    PdfPageBase page = document.Pages.Add(PdfPageSize.A4);
    page.Canvas.DrawString("This is a demo about image watermark!",
                            new PdfFont(PdfFontFamily.Helvetica, 25f),
                            new PdfSolidBrush(Color.Green),
                            10, 40);
    
    //set image as BackgroundImage to make image watermark
    Image img = Image.FromFile("scene.bmp");
    page.BackgroundImage = img;
    document.SaveToFile("result.pdf");
    
    How to repeat header on all pages?
    A : Things in PdfDocumentTemplate will apply to every page of the PDF file. All you have to do is to create a method that add header to PdfDocumentTemplate. Then header will be added to every page. Full code:
    static void Main(string[] args)
    {
        PdfDocument doc = new PdfDocument();
        PdfUnitConvertor unitCvtr = new PdfUnitConvertor();
        PdfMargins margin = new PdfMargins();
        margin.Top = unitCvtr.ConvertUnits(3.0f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);
        margin.Bottom = margin.Top;
        margin.Left = unitCvtr.ConvertUnits(3.17f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);
        margin.Right = margin.Left;
    
        // create three page
        PdfPageBase page = doc.Pages.Add(PdfPageSize.A4, margin);
        page = doc.Pages.Add(PdfPageSize.A4, margin);
        page = doc.Pages.Add(PdfPageSize.A4, margin);
    
        //apply template
        SetDocumentTemplate(doc, PdfPageSize.A4, margin);
        doc.SaveToFile("result.pdf");
    
    }
    //method to add header to every page
    private static void SetDocumentTemplate(PdfDocument doc, SizeF pageSize, PdfMargins margin)
    {
        PdfPageTemplateElement leftSpace
            = new PdfPageTemplateElement(margin.Left, pageSize.Height);
        doc.Template.Left = leftSpace;
    
        PdfPageTemplateElement topSpace
            = new PdfPageTemplateElement(pageSize.Width, margin.Top);
        topSpace.Foreground = true;
        doc.Template.Top = topSpace;
    
        //draw header label
        PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial", 9f, FontStyle.Italic));
        PdfStringFormat format = new PdfStringFormat(PdfTextAlignment.Right);
        String label = "Demo about Header Repeating";
    
        //set the header style
        SizeF size = font.MeasureString(label, format);
        float y = topSpace.Height - font.Height - 40;
        PdfPen pen = new PdfPen(Color.Black, 0.75f);
        topSpace.Graphics.SetTransparency(0.5f);
        topSpace.Graphics.DrawLine(pen, margin.Left - 30, y, pageSize.Width - margin.Right + 30, y);
        y = y - 1 - size.Height;
        topSpace.Graphics.DrawString(label, font, PdfBrushes.Black, pageSize.Width - margin.Right, y, format);
    
        PdfPageTemplateElement rightSpace
            = new PdfPageTemplateElement(margin.Right, pageSize.Height);
        doc.Template.Right = rightSpace;
    
        PdfPageTemplateElement bottomSpace
            = new PdfPageTemplateElement(pageSize.Width, margin.Bottom);
        bottomSpace.Foreground = true;
        doc.Template.Bottom = bottomSpace;
    }