The HiQPdf software is able to load external PDF documents and to add new objects over the existing content.
In this demo you can learn how to load a PDF document from a file and layout various PDF objects on top of the existing content.
The demo will make two changes to the PDF document to edit: will create an orange border for each PDF page of the loaded document and will create a canvas whose content is automatically repeated on each PDF page. The content from a HTML document will be laid out in the repeated canvas.
The HTML document does not have a background which makes visible the existing content from PDF and even more, the PNG image used in HTML is also transparent to create a very special effect.
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Hosting; using HiQPdfClient; namespace HiQPdf_Demo.Controllers { public class EditPdfController : Controller { IWebHostEnvironment m_hostingEnvironment; public EditPdfController(IWebHostEnvironment hostingEnvironment) { m_hostingEnvironment = hostingEnvironment; } // GET: EditPdf public ActionResult Index() { SetCrtPageUri(); return View(); } [HttpPost] public ActionResult CreatePdf(IFormCollection collection) { string serverIP = collection["textBoxServerIP"]; uint serverPort = uint.Parse(collection["textBoxServerPort"]); string serverPassword = collection["textBoxServerPassword"]; // the path PDF document to edit string pdfDocumentToEdit = m_hostingEnvironment.WebRootPath + "/DemoFiles/Pdf/WikiPdf.pdf"; // assign a string to this variable if the PDF document to edit is password protected string pdfOpenPassword = null; // load the PDF document to edit PdfDocument document = PdfDocument.FromFile(serverIP, serverPort, serverPassword, pdfDocumentToEdit, pdfOpenPassword); // set a demo serial number document.SerialNumber = "YCgJMTAE-BiwJAhIB-EhlWTlBA-UEBRQFBA-U1FOUVJO-WVlZWQ=="; #region Add an orange border to each page of the loaded PDF document // add an orange border to each PDF page in the loaded PDF document foreach (PdfPage pdfPage in document.Pages) { float crtPdfPageWidth = pdfPage.Size.Width; float crtPdfPageHeight = pdfPage.Size.Height; // create a PdfRectangle object PdfRectangle pdfRectangle = new PdfRectangle(2, 2, crtPdfPageWidth - 4, crtPdfPageHeight - 4); pdfRectangle.LineStyle.LineWidth = 2; pdfRectangle.ForeColor = PdfColor.OrangeRed; // layout the rectangle in PDF page pdfPage.Layout(pdfRectangle); } #endregion Add an orange border to each page of the loaded PDF document #region Layout HTML in a canvas to be repeated on each page of the loaded PDF document PdfPage pdfPage1 = document.Pages[0]; float pdfPageWidth = pdfPage1.Size.Width; float pdfPageHeight = pdfPage1.Size.Height; // the width of the HTML logo in pixels int htmlLogoWidthPx = 400; // the width of the HTML logo in points float htmlLogoWidthPt = PdfDpiTransform.FromPixelsToPoints(htmlLogoWidthPx); float htmlLogoHeightPt = 100; // create a canvas to be repeated in the center of each PDF page // the canvas is a PDF container that can contain PDF objects ( HTML, text, images, etc ) PdfRepeatCanvas repeatedCanvas = document.CreateRepeatedCanvas(new RectangleFloat((pdfPageWidth - htmlLogoWidthPt) / 2, (pdfPageHeight - htmlLogoHeightPt) / 2, htmlLogoWidthPt, htmlLogoHeightPt)); // the HTML file giving the content to be placed in the repeated canvas string htmlFile = "http://www.hiqpdf.com/ClientDemo" + @"/DemoFiles/Html/Logo.Html"; // the HTML object to be laid out in repeated canvas PdfHtml htmlLogo = new PdfHtml(0, 0, repeatedCanvas.Width, repeatedCanvas.Height, htmlFile); // the browser width when rendering the HTML htmlLogo.BrowserWidth = htmlLogoWidthPx; // the HTML content will fit the destination hight which is the same with repeated canvas height htmlLogo.FitDestHeight = true; // layout the HTML object in the repeated canvas repeatedCanvas.Layout(htmlLogo); #endregion Layout HTML in a canvas to be repeated on each page of the loaded PDF document try { // write the PDF document to a memory buffer byte[] pdfBuffer = document.WriteToMemory(); FileResult fileResult = new FileContentResult(pdfBuffer, "application/pdf"); fileResult.FileDownloadName = "EditPdf.pdf"; return fileResult; } finally { document.Close(); } } private void SetCrtPageUri() { HttpRequest httpRequest = this.ControllerContext.HttpContext.Request; UriBuilder uriBuilder = new UriBuilder(); uriBuilder.Scheme = httpRequest.Scheme; uriBuilder.Host = httpRequest.Host.Host; if (httpRequest.Host.Port != null) uriBuilder.Port = (int)httpRequest.Host.Port; uriBuilder.Path = httpRequest.PathBase.ToString() + httpRequest.Path.ToString(); uriBuilder.Query = httpRequest.QueryString.ToString(); ViewData["CrtPageUri"] = uriBuilder.Uri.AbsoluteUri; } } }