EVO PDF Logo

Table of Contents for Multiple HTMLs

EVO PDF Client for .NET Core

EVO HTML to PDF Converter allows you to merge multiple HTML document into a single PDF document and also merge the table of contents generated for each HTML document in an unified table of contents. The merged table of contents is controlled by the DocumentTableOfContents similar to HtmlToPdfConverterTableOfContentsOptions property. The HtmlToPdfElementTableOfContentsEnabled property controls if the table of contents for a HTML document is included or not in the unified table of contents of the PDF document.

Code Sample - Merge Table of Contents from Multiple HTML Pages

C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Http;

// Use EVO PDF Namespace
using EvoPdfClient;

namespace EvoHtmlToPdfDemo.Controllers.HTML_to_PDF.Table_of_Contents
{
    public class Merge_Table_of_ContentsController : Controller
    {
        [HttpPost]
        public ActionResult ConvertHtmlToPdf(IFormCollection collection)
        {
            // Get the server options
            string serverIP = collection["textBoxServerIP"];
            uint serverPort = uint.Parse(collection["textBoxServerPort"]);
            string servicePassword = collection["textBoxServicePassword"];
            bool useServicePassword = servicePassword.Length > 0;
            bool useTcpService = collection["ServerType"] == "radioButtonUseTcpService";
            string webServiceUrl = collection["textBoxWebServiceUrl"];

            // Create a PDF document
            Document pdfDocument = null;
            if (useTcpService)
                pdfDocument = new Document(serverIP, serverPort);
            else
                pdfDocument = new Document(true, webServiceUrl);

            // Set optional service password
            if (useServicePassword)
                pdfDocument.ServicePassword = servicePassword;

            // Set license key received after purchase to use the converter in licensed mode
            // Leave it not set to use the converter in demo mode
            pdfDocument.LicenseKey = "4W9+bn19bn5ue2B+bn1/YH98YHd3d3c=";

            // Create a PDF page where to add the first HTML
            PdfPage firstPdfPage = pdfDocument.AddPage();

            // Enable the creation of a table of contents from H1 to H6 tags found in HTML
            pdfDocument.TableOfContents.AutoTocItemsEnabled = collection["autoTableOfContentsCheckBox"].Count > 0;

            // Optionally set the table of contents title
            pdfDocument.TableOfContents.Title = "Table of Contents";

            // Optionally set the title style using CSS sttributes
            pdfDocument.TableOfContents.TitleStyle = "color:navy; font-family:'Times New Roman'; font-size:28px; font-weight:normal";

            // Optionally set the style of level 1 items in table of contents
            string level1TextStyle = "color:black; font-family:'Times New Roman'; font-size:20px; font-weight:normal; font-style:normal; background-color:#F0F0F0";
            pdfDocument.TableOfContents.SetItemStyle(1, level1TextStyle);

            // Optionally set the page numbers style of level 1 items in table of contents
            string level1PageNumberStyle = "color:black; padding-right:3px; background-color:#F0F0F0; font-size:14px; font-weight:bold";
            pdfDocument.TableOfContents.SetPageNumberStyle(1, level1PageNumberStyle);

            // Create the first HTML to PDF element
            HtmlToPdfElement firstHtml = new HtmlToPdfElement(0, 0, collection["firstUrlTextBox"]);

            // Optionally set a delay before conversion to allow asynchonous scripts to finish
            firstHtml.ConversionDelay = 2;

            // Enable or disable the table of contents for the first HTML document
            firstHtml.TableOfContentsEnabled = collection["includeFirstHtmlTocCheckBox"].Count > 0;

            // Add the first HTML to PDF document
            firstPdfPage.AddElement(firstHtml);

            PdfPage secondPdfPage = null;

            // Create the second HTML to PDF element
            HtmlToPdfElement secondHtml = new HtmlToPdfElement(0, 0, collection["secondUrlTextBox"]);

            // Optionally set a delay before conversion to allow asynchonous scripts to finish
            secondHtml.ConversionDelay = 2;

            // Enable or disable the table of contents for the second HTML document
            secondHtml.TableOfContentsEnabled = collection["includeSecondHtmlTocCheckBox"].Count > 0;

            if (collection["startNewPageCheckBox"].Count > 0)
            {
                // Create a PDF page where to add the second HTML
                secondPdfPage = pdfDocument.AddPage();

                // Add the second HTML to PDF document
                secondPdfPage.AddElement(secondHtml);
            }
            else
            {
                // Add the second HTML right after the first one
                pdfDocument.AddElement(secondHtml);
            }

            // Save the PDF document in a memory buffer
            byte[] outPdfBuffer = pdfDocument.Save();

            // Send the PDF file to browser
            FileResult fileResult = new FileContentResult(outPdfBuffer, "application/pdf");
            fileResult.FileDownloadName = "Merge_Table_of_Contents.pdf";

            return fileResult;
        }
    }
}