EVO HTML to PDF Converter

Table of Contents for Multiple HTMLs

EVO HTML to PDF Converter for .NET Documentation

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

protected void convertToPdfButton_Click(object sender, EventArgs e)
{
    // Create the PDF document where to add the HTML documents
    Document pdfDocument = new Document();

    // 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 = autoTableOfContentsCheckBox.Checked;

    // 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);

    try
    {
        // Create the first HTML to PDF element
        HtmlToPdfElement firstHtml = new HtmlToPdfElement(0, 0, firstUrlTextBox.Text);

        // 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 = includeFirstHtmlTocCheckBox.Checked;

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

        PdfPage secondPdfPage = null;
        PointF secondHtmlLocation = Point.Empty;

        if (startNewPageCheckBox.Checked)
        {
            // Create a PDF page where to add the second HTML
            secondPdfPage = pdfDocument.AddPage();
            secondHtmlLocation = PointF.Empty;
        }
        else
        {
            // Add the second HTML on the PDF page where the first HTML ended
            secondPdfPage = firstAddResult.EndPdfPage;
            secondHtmlLocation = new PointF(firstAddResult.EndPageBounds.Left, firstAddResult.EndPageBounds.Bottom);
        }

        // Create the second HTML to PDF element
        HtmlToPdfElement secondHtml = new HtmlToPdfElement(secondHtmlLocation.X, secondHtmlLocation.Y, secondUrlTextBox.Text);

        // 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 = includeSecondHtmlTocCheckBox.Checked;

        // Add the second HTML to PDF document
        secondPdfPage.AddElement(secondHtml);

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

        // Send the PDF as response to browser

        // Set response content type
        Response.AddHeader("Content-Type", "application/pdf");

        // Instruct the browser to open the PDF file as an attachment or inline
        Response.AddHeader("Content-Disposition", String.Format("attachment; filename=Merge_Table_of_Contents.pdf; size={0}", outPdfBuffer.Length.ToString()));

        // Write the PDF document buffer to HTTP response
        Response.BinaryWrite(outPdfBuffer);

        // End the HTTP response and stop the current page processing
        Response.End();
    }
    finally
    {
        // Close the PDF document
        pdfDocument.Close();
    }
}