EVO HTML to PDF Converter allows you add HTML in header and footer. The HTML you add in header and footer as EvoPdfClientHtmlToPdfVariableElement objects can contain the &p; place holder for current PDF page number and the &P; place holder for the total number of pages of the PDF document.
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.PDF_Creator.Headers_and_Footers
{
public class PDF_Creator_Page_Numbers_in_HTMLController : Controller
{
[HttpPost]
public ActionResult CreatePdf(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=";
// Add a PDF page to PDF document
PdfPage pdfPage = pdfDocument.AddPage();
// Create the document footer template
pdfDocument.AddFooterTemplate(50);
// ----- Add HTML with Page Numbering to Footer -----
// Create a variable HTML element with page numbering
string htmlStringWithPageNumbers = collection["htmlWithPageNumbersTextBox"];
string baseUrl = collection["baseUrlTextBox"];
HtmlToPdfVariableElement footerHtmlWithPageNumbers = new HtmlToPdfVariableElement(htmlStringWithPageNumbers, baseUrl);
// Set the HTML element to fit the container height
footerHtmlWithPageNumbers.FitHeight = true;
// Add variable HTML element with page numbering to footer
pdfDocument.Footer.AddElement(footerHtmlWithPageNumbers);
// Optionally draw a line at the top of the footer
if (collection["drawFooterLineCheckBox"].Count > 0)
{
float footerWidth = pdfDocument.GetPage(0).PageSize.Width;
// Create a line element for the top of the footer
LineElement footerLine = new LineElement(0, 0, footerWidth, 0);
// Set line color
footerLine.ForeColor = RgbColor.Gray;
// Add line element to the bottom of the footer
pdfDocument.Footer.AddElement(footerLine);
}
// Create a HTML to PDF element to add to document
HtmlToPdfElement htmlToPdfElement = new HtmlToPdfElement(0, 0, collection["urlTextBox"]);
// Optionally set a delay before conversion to allow asynchonous scripts to finish
htmlToPdfElement.ConversionDelay = 2;
// Optionally add a space between footer and the page body
// Leave this option not set for no spacing
htmlToPdfElement.BottomSpacing = float.Parse(collection["footerSpacingTextBox"]);
// Add the HTML to PDF element to document
// This will raise the PrepareRenderPdfPageEvent event where the header and footer visibilit per page can be changed
pdfPage.AddElement(htmlToPdfElement);
// 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 = "Page_Numbers_in_HTML.pdf";
return fileResult;
}
}
}
<!DOCTYPE html>
<html>
<head>
<title>Add Page Numbering in HTML</title>
</head>
<body style="font-family: 'Times New Roman'; font-size: 14px">
<table style="width: 100%">
<tr>
<td style="font-weight: bold; color: navy">HTML with Page Numbering</td>
<td rowspan="2"><a href="http://www.evopdf.com">
<img alt="Logo Image" style="width: 200px" src="img/logo.jpg" /></a></td>
<td rowspan="2" style="width: 5px"></td>
</tr>
<tr>
<!-- Add Page Numbering in HTML using &p; and &P -->
<td style="width: 90%">Page <span style="color: navy; font-weight: bold">&p;</span> of <span style="font-size: 16px; color: green; font-weight: bold">&P;</span> pages
</td>
</tr>
</table>
</body>
</html>