PDF header presents consistent information of a PDF document. It can be automatic page number, a date, a section title, an icon or an image. Whatever it is, it is an important part for a PDF file. This article will introduce how to add a header when programmatically creating a PDF document from scratch.
You can add both text and image in your PDF header by using Spire.PDF for .NET. In order to display the header content appropriately, you can also set text format and image size. The picture below shows the output after adding header in PDF:
Main Steps:
Step 1: Define a custom function CreateHeaderTemplate() to create a page template element that servers as header, and return a PdfPageDocumentElement object.
In the code below, we first initialize a page template object that can be used as header, then call DrawString() method, DrawImage() method and DrawLine() method to insert text,image and line into the header space.
static PdfPageTemplateElement CreateHeaderTemplate(PdfDocument doc, PdfMargins margins) { //get page size SizeF pageSize = doc.PageSettings.Size; //create a PdfPageTemplateElement object as header space PdfPageTemplateElement headerSpace = new PdfPageTemplateElement(pageSize.Width, margins.Top); headerSpace.Foreground = false; //declare two float variables float x = margins.Left; float y = 0; //draw image in header space PdfImage headerImage = PdfImage.FromFile("logo.png"); float width = headerImage.Width / 3; float height = headerImage.Height / 3; headerSpace.Graphics.DrawImage(headerImage, x, margins.Top - height - 2, width, height); //draw line in header space PdfPen pen = new PdfPen(PdfBrushes.Gray, 1); headerSpace.Graphics.DrawLine(pen, x, y + margins.Top - 2, pageSize.Width - x, y + margins.Top - 2); //draw text in header space PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Impact", 25f, FontStyle.Bold)); PdfStringFormat format = new PdfStringFormat(PdfTextAlignment.Left); String headerText = "HEADER TEXT"; SizeF size = font.MeasureString(headerText, format); headerSpace.Graphics.DrawString(headerText, font, PdfBrushes.Gray, pageSize.Width - x - size.Width-2, margins.Top- (size.Height+5), format); //return headerSpace return headerSpace; }
Step 2: Create a PDF document, call the method CreateHeaderTemplate() to create a header template and apply it to the document.
static void Main(string[] args) { //create a PDF document PdfDocument doc = new PdfDocument(); doc.PageSettings.Size = PdfPageSize.A4; //reset the default margins to 0 doc.PageSettings.Margins = new PdfMargins(0); //create a PdfMargins object, the parameters indicate the page margins you want to set PdfMargins margins = new PdfMargins(60, 60, 60, 60); //create a header template with content and apply it to page template doc.Template.Top = CreateHeaderTemplate(doc, margins); //apply blank templates to other parts of page template doc.Template.Bottom = new PdfPageTemplateElement(doc.PageSettings.Size.Width, margins.Bottom); doc.Template.Left = new PdfPageTemplateElement(margins.Left, doc.PageSettings.Size.Height); doc.Template.Right = new PdfPageTemplateElement(margins.Right, doc.PageSettings.Size.Height); //save the file doc.SaveToFile("PdfHeader.pdf"); }
Full Code:
using Spire.Pdf; using Spire.Pdf.Graphics; using System; using System.Drawing; namespace AddPDFHeader { class Program { static void Main(string[] args) { //create a PDF document PdfDocument doc = new PdfDocument(); doc.PageSettings.Size = PdfPageSize.A4; //reset the default margins to 0 doc.PageSettings.Margins = new PdfMargins(0); //create a PdfMargins object, the parameters indicate the page margins you want to set PdfMargins margins = new PdfMargins(60, 60, 60, 60); //create a header template with content and apply it to page template doc.Template.Top = CreateHeaderTemplate(doc, margins); //apply blank templates to other parts of page template doc.Template.Bottom = new PdfPageTemplateElement(doc.PageSettings.Size.Width, margins.Bottom); doc.Template.Left = new PdfPageTemplateElement(margins.Left, doc.PageSettings.Size.Height); doc.Template.Right = new PdfPageTemplateElement(margins.Right, doc.PageSettings.Size.Height); //save the file doc.SaveToFile("PdfHeader.pdf"); } static PdfPageTemplateElement CreateHeaderTemplate(PdfDocument doc, PdfMargins margins) { //get page size SizeF pageSize = doc.PageSettings.Size; //create a PdfPageTemplateElement object as header space PdfPageTemplateElement headerSpace = new PdfPageTemplateElement(pageSize.Width, margins.Top); headerSpace.Foreground = false; //declare two float variables float x = margins.Left; float y = 0; //draw image in header space PdfImage headerImage = PdfImage.FromFile("logo.png"); float width = headerImage.Width / 3; float height = headerImage.Height / 3; headerSpace.Graphics.DrawImage(headerImage, x, margins.Top - height - 2, width, height); //draw line in header space PdfPen pen = new PdfPen(PdfBrushes.Gray, 1); headerSpace.Graphics.DrawLine(pen, x, y + margins.Top - 2, pageSize.Width - x, y + margins.Top - 2); //draw text in header space PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Impact", 25f, FontStyle.Bold)); PdfStringFormat format = new PdfStringFormat(PdfTextAlignment.Left); String headerText = "HEADER TEXT"; SizeF size = font.MeasureString(headerText, format); headerSpace.Graphics.DrawString(headerText, font, PdfBrushes.Gray, pageSize.Width - x - size.Width - 2, margins.Top - (size.Height + 5), format); //return headerSpace return headerSpace; } } }
Imports Spire.Pdf Imports Spire.Pdf.Graphics Imports System.Drawing Namespace AddPDFHeader Class Program Private Shared Sub Main(args As String()) 'create a PDF document Dim doc As New PdfDocument() doc.PageSettings.Size = PdfPageSize.A4 'reset the default margins to 0 doc.PageSettings.Margins = New PdfMargins(0) 'create a PdfMargins object, the parameters indicate the page margins you want to set Dim margins As New PdfMargins(60, 60, 60, 60) 'create a header template with content and apply it to page template doc.Template.Top = CreateHeaderTemplate(doc, margins) 'apply blank templates to other parts of page template doc.Template.Bottom = New PdfPageTemplateElement(doc.PageSettings.Size.Width, margins.Bottom) doc.Template.Left = New PdfPageTemplateElement(margins.Left, doc.PageSettings.Size.Height) doc.Template.Right = New PdfPageTemplateElement(margins.Right, doc.PageSettings.Size.Height) 'save the file doc.SaveToFile("PdfHeader.pdf") End Sub Private Shared Function CreateHeaderTemplate(doc As PdfDocument, margins As PdfMargins) As PdfPageTemplateElement 'get page size Dim pageSize As SizeF = doc.PageSettings.Size 'create a PdfPageTemplateElement object as header space Dim headerSpace As New PdfPageTemplateElement(pageSize.Width, margins.Top) headerSpace.Foreground = False 'declare two float variables Dim x As Single = margins.Left Dim y As Single = 0 'draw image in header space Dim headerImage As PdfImage = PdfImage.FromFile("logo.png") Dim width As Single = headerImage.Width / 3 Dim height As Single = headerImage.Height / 3 headerSpace.Graphics.DrawImage(headerImage, x, margins.Top - height - 2, width, height) 'draw line in header space Dim pen As New PdfPen(PdfBrushes.Gray, 1) headerSpace.Graphics.DrawLine(pen, x, y + margins.Top - 2, pageSize.Width - x, y + margins.Top - 2) 'draw text in header space Dim font As New PdfTrueTypeFont(New Font("Impact", 25F, FontStyle.Bold)) Dim format As New PdfStringFormat(PdfTextAlignment.Left) Dim headerText As [String] = "HEADER TEXT" Dim size As SizeF = font.MeasureString(headerText, format) headerSpace.Graphics.DrawString(headerText, font, PdfBrushes.Gray, pageSize.Width - x - size.Width - 2, margins.Top - (size.Height + 5), format) 'return headerSpace Return headerSpace End Function End Class End Namespace