Create Header and Footer in Word document using Apache POI

Introduction

In this tutorial I will show you how to create Header and Footer in Word document using Apache POI API. Apache POI library is Java based API that makes our life easier to manipulate date on Microsoft office Documents. I will create here a Java application to create header and footer in word document using apache poi library.

A page header is text that appears in the top margin area of each page, separated from the main body of text, and usually conveying context information, such as the document title, author, creation date, or the page number. A page footer is analogous in every way to a page header except that it appears at the bottom of a page.

Prerequisites

Java at least 8, Apache POI 3.15 – 5.0.0, Maven 3.6.1 – 3.6.3

Project Setup

You basically need to create a maven or gradle based project in eclipse. The name of the project is word-header-footer-apache-poi. If you are creating maven based project then you can use the project’s name as Artifact Id and Group Id as com.roytuts.

Once the project is created and eclipse finishes build then you need to modify the pom.xml file as shown below.

Here I will add apache poi API as a dependency for working with microsoft word document or even you can work with open source word document.

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.roytuts</groupId>
	<artifactId>word-header-footer-apache-poi</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<maven.compiler.source>12</maven.compiler.source>
		<maven.compiler.target>12</maven.compiler.target>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml</artifactId>
			<version>5.0.0</version>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.8.1</version>
			</plugin>
		</plugins>
	</build>
</project>

You know how to create header and footer in word document manually from an option given in the word document but here I will see how to create header and footer in word document using apache poi in Java program.

Related Posts:

Header and Footer in Word File

Create below class to create Header and Footer text in word file.

In the below source code I create object of XPFWDocument type and I create two paragraphs with sample text.

I have set indent for the paragraph and also align text for the paragraph with adjustment. I wrap the paragraph’s text.

Finally inside the try catch block I create header and footer with sample texts. I have attached an image how the final word document looks like later in the final output.

package com.roytuts.word.header.footer.apache.poi;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTText;

public class WordDocxHeaderFooter {

	public static void main(String[] args) {
		wordHeaderFooter("word_docx_header_footer.docx");
	}

	public static void wordHeaderFooter(final String wordFileName) {
		XWPFDocument doc = new XWPFDocument();

		// create a paragraph with justify alignment
		XWPFParagraph p1 = doc.createParagraph();

		// first line indentation in the paragraph
		p1.setFirstLineIndent(400);

		// justify alignment
		p1.setAlignment(ParagraphAlignment.DISTRIBUTE);

		// wrap words
		p1.setWordWrapped(true);

		// XWPFRun object defines a region of text with a common set of
		// properties
		XWPFRun r1 = p1.createRun();
		String t1 = "Paragraph 1. Sample Paragraph Post. This is a sample Paragraph post. Sample Paragraph text is being cut and pasted again and again. This is a sample Paragraph post. peru-duellmans-poison-dart-frog."
				+ " Sample Paragraph Post. This is a sample Paragraph post. Sample Paragraph text is being cut and pasted again and again. This is a sample Paragraph post. peru-duellmans-poison-dart-frog.";
		r1.setText(t1);

		// create a paragraph with left alignment
		XWPFParagraph p2 = doc.createParagraph();

		// first line indentation in the paragraph
		p2.setFirstLineIndent(400);

		// left alignment
		p2.setAlignment(ParagraphAlignment.LEFT);

		// wrap words
		p2.setWordWrapped(true);

		// XWPFRun object defines a region of text with a common set of
		// properties
		XWPFRun r2 = p2.createRun();
		String t2 = "Paragraph 2. Sample Paragraph Post. This is a sample Paragraph post. Sample Paragraph text is being cut and pasted again and again. This is a sample Paragraph post. peru-duellmans-poison-dart-frog."
				+ " Sample Paragraph Post. This is a sample Paragraph post. Sample Paragraph text is being cut and pasted again and again. This is a sample Paragraph post. peru-duellmans-poison-dart-frog.";
		r2.setText(t2);

		XWPFParagraph[] pars;

		try {
			CTP ctP = CTP.Factory.newInstance();

			// header text
			CTText t = ctP.addNewR().addNewT();
			t.setStringValue("Sample Header Text");

			pars = new XWPFParagraph[1];
			p1 = new XWPFParagraph(ctP, doc);
			pars[0] = p1;

			XWPFHeaderFooterPolicy hfPolicy = doc.createHeaderFooterPolicy();
			hfPolicy.createHeader(XWPFHeaderFooterPolicy.DEFAULT, pars);

			ctP = CTP.Factory.newInstance();
			t = ctP.addNewR().addNewT();

			// footer text
			t.setStringValue("Sample Footer Text");

			pars[0] = new XWPFParagraph(ctP, doc);
			hfPolicy.createFooter(XWPFHeaderFooterPolicy.DEFAULT, pars);

			// write to word docx
			OutputStream os = new FileOutputStream(new File(wordFileName));
			doc.write(os);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

Testing the Program

Run the above class to see the output in word_docx_header_footer.docx file. The file is created under root directory of the project.

Look at the below image which gives you the final output:

create header and footer in word document using apache poi

That’s all. Hope you have got an idea how to create header and footer in word document using apache poi.

Source Code

Download

Leave a Reply

Your email address will not be published. Required fields are marked *