Core Java

How To Add Header and Footer to PDF Using iText in Java

Adding headers and footers to a PDF is a common requirement in document generation. Headers often contain titles, dates, or logos, while footers may include page numbers or copyright information. Let us delve into understanding how to use Java and the iText library to create a PDF with a custom header and footer.

1. Introduction

The iText library is a widely used Java library for creating and manipulating PDF documents. It is designed to help developers generate high-quality, dynamic, and interactive PDFs programmatically. iText supports a range of features, including text and image addition, table generation, watermarking, encryption, digital signatures, and more. With its ability to handle complex layouts and dynamic data, it is particularly popular in industries like finance, healthcare, and e-commerce, where automated document generation is essential.

The library provides both high-level abstractions, such as adding paragraphs and tables, and low-level APIs, allowing fine-grained control over PDF content. Its modular architecture enables developers to choose specific functionalities as per their requirements, making it versatile and efficient for various use cases.

1.1 Benefits of Using iText

Using iText in Java projects offers several advantages:

  • Comprehensive Features: iText supports a wide range of features, such as text formatting, table creation, embedding multimedia, and adding metadata, making it suitable for diverse applications.
  • Platform-Independent: Since iText is written in Java, it is platform-independent and can be used across different operating systems and environments.
  • Dynamic Document Creation: iText allows developers to create PDFs dynamically based on user inputs or data from external sources, making it ideal for report generation and form creation.
  • High Customizability: With both high-level and low-level APIs, developers have complete control over the layout and design of the PDF content.
  • Support for PDF Standards: iText adheres to PDF standards like PDF/A, making it suitable for archiving and ensuring compatibility across viewers.
  • Extensive Documentation and Community Support: iText offers comprehensive documentation, tutorials, and an active community, helping developers quickly resolve issues and implement features effectively.
  • Cross-Language Compatibility: iText is available for other languages like C# (.NET), expanding its usability beyond Java projects.

These benefits make iText a powerful and reliable choice for projects requiring PDF manipulation, enabling developers to produce professional and feature-rich documents with ease.

2. Implementing the Header and Footer Handler

iText provides a way to customize PDF content through the PdfPageEventHelper class. By extending this class, you can define your logic for adding headers and footers.

import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.kernel.events.PdfDocumentEvent;
import com.itextpdf.kernel.events.PdfPageEventHelper;
import com.itextpdf.layout.Document;

public class HeaderFooterHandler extends PdfPageEventHelper {
  @Override
  public void handleEvent(PdfDocumentEvent event) {
    PdfDocument pdfDocument = event.getDocument();
    PdfCanvas canvas = new PdfCanvas(event.getPage());

    // Adding Header
    canvas.beginText()
      .setFontAndSize(com.itextpdf.kernel.font.PdfFontFactory.createFont(), 12)
      .moveText(36, pdfDocument.getDefaultPageSize().getTop() - 20)
      .showText("Document Header")
      .endText();

    // Adding Footer
    canvas.beginText()
      .moveText(36, 20)
      .showText("Page " + pdfDocument.getPageNumber(event.getPage()))
      .endText();

    canvas.release();
  }
}

2.1 Code Explanation

The provided code defines a class HeaderFooterHandler that extends PdfPageEventHelper from the iText library. It customizes the behavior of PDF page events by adding headers and footers dynamically.

The overridden handleEvent method is invoked for each page creation event. Inside this method, a PdfCanvas object is used to draw text on the PDF.

The header is added at the top of each page by initiating a text object using beginText, setting the font and size with setFontAndSize, and positioning the text near the top using moveText. The actual header text, “Document Header,” is rendered with showText, and the text object is closed using endText.

Similarly, the footer is added at the bottom of the page by initiating another text object, positioning it near the bottom using moveText, and displaying the page number dynamically using pdfDocument.getPageNumber(event.getPage()). The footer text object is also closed with endText.

Finally, canvas.release() is called to release resources used by the canvas.

3. Adding a Header and Footer to the PDF

Once the header and footer logic are defined, attach the event handler to a PdfDocument.

import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;

public class Main {
  public static void main(String[] args) throws Exception {
    String outputFile = "output.pdf";

    PdfWriter writer = new PdfWriter(outputFile);
    PdfDocument pdfDocument = new PdfDocument(writer);
    Document document = new Document(pdfDocument);

    // Adding Header and Footer Handler
    pdfDocument.addEventHandler(PdfDocumentEvent.START_PAGE, new HeaderFooterHandler());

    // Adding content to the document
    document.add(new com.itextpdf.layout.element.Paragraph("This is the content of the PDF."));

    // Closing the document
    document.close();

    System.out.println("PDF created with header and footer: " + outputFile);
  }
}

3.1 Code Explanation

This Java program demonstrates how to generate a PDF with a header and footer using the iText library. The main method begins by specifying the output file name (output.pdf). A PdfWriter object is created to handle the writing of the PDF file, which is then linked to a PdfDocument object to manage the document’s structure. A Document object is instantiated to provide a high-level interface for adding content to the PDF.

The header and footer functionality is added by registering a custom event handler, HeaderFooterHandler, to the PdfDocument. This ensures that the header and footer will be dynamically included on every page of the PDF. Content is added to the PDF using the add method of the Document object. In this case, a simple paragraph with the text "This is the content of the PDF." is added.

Once all content is added, the document.close() method is called to finalize and save the PDF file. This step is critical to ensure that all changes are written to the file and resources are released. Finally, the program prints a success message indicating that the PDF has been created with the header and footer.

3.2 Code Output

After running the code, the PDF will include:

  • A header at the top of each page with the text: “Document Header”.
  • A footer at the bottom of each page displaying the page number.

The output file output.pdf will be saved in the specified directory.

4. Conclusion

This tutorial demonstrated how to use the iText library in Java to add headers and footers to a PDF. By leveraging the PdfPageEventHelper class, you can customize document appearance effectively. This approach is ideal for creating professional, readable documents for various use cases.

Yatin Batra

An experience full-stack engineer well versed with Core Java, Spring/Springboot, MVC, Security, AOP, Frontend (Angular & React), and cloud technologies (such as AWS, GCP, Jenkins, Docker, K8).
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Back to top button