vogella.de

Follow me on twitter
About Lars Vogel
Flattr this

Creating PDF with Java and iText - Tutorial

Lars Vogel

Version 0.2

28.06.2009

Revision History
Revision 0.128.06.2009Lars Vogel
Created
Revision 0.230.06.2009Lars Vogel
Added lists and tables

Java and PDF with iText

This article demonstrate how to create PDF files with Java and the iText library. The creation of sections, standard text, lists and tables is demonstrated.


Table of Contents

1. Overview
2. Installation
3. Create a PDF
4. Thank you
5. Questions and Discussion
6. Links and Literature
6.1. Source Code
6.2. iText Resources
6.3. vogella Resources

1. Overview

iText is a Java library originally created by Bruno Lowagie which allows to create PDF, read PDF and manipulate them.

The following tutorial will show how to create a simple PDF file with iText. This tutorial assumes that you know how to create simple Java projects in Eclipse. See Eclipse Java IDE in case you have no experience with Eclipse.

2. Installation

Download the iText core binary from the webpage http://www.lowagie.com/iText/

3. Create a PDF

Create a new Java project "de.vogella.pdf.write". Create a package "de.vogella.pdf.write".

Create a folder "lib" and put the iText library (jar file) into this folder. Add the the iText jar to your classpath. See Changing classpath in Eclipse .

I assume that the coding is pretty much self-explaining. I tried to add lots of comments to make it easier to understand. For more complex examples have a look at the iText homepage.

			
package de.vogella.pdf.write;

import java.awt.Color;
import java.io.FileOutputStream;
import java.util.Date;

import com.lowagie.text.Anchor;
import com.lowagie.text.BadElementException;
import com.lowagie.text.Cell;
import com.lowagie.text.Chapter;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Font;
import com.lowagie.text.List;
import com.lowagie.text.ListItem;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Section;
import com.lowagie.text.Table;
import com.lowagie.text.pdf.PdfWriter;

public class FirstPdf {
	private static String FILE = "c:/temp/FirstPdf.pdf";
	private static Font catFont = new Font(Font.TIMES_ROMAN, 18, Font.BOLD);
	private static Font redFont = new Font(Font.TIMES_ROMAN, 12, Font.NORMAL,
			Color.RED);
	private static Font subFont = new Font(Font.TIMES_ROMAN, 16, Font.BOLD);
	private static Font smallBold = new Font(Font.TIMES_ROMAN, 12, Font.BOLD);

	public static void main(String[] args) {
		try {
			Document document = new Document();
			PdfWriter.getInstance(document, new FileOutputStream(FILE));
			document.open();
			addMetaData(document);
			addTitlePage(document);
			addContent(document);
			document.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// iText allows to add metadata to the PDF which can be viewed in your Adobe
	// Reader
	// under File -> Properties
	private static void addMetaData(Document document) {
		document.addTitle("My first PDF");
		document.addSubject("Using iText");
		document.addKeywords("Java, PDF, iText");
		document.addAuthor("Lars Vogel");
		document.addCreator("Lars Vogel");
	}

	private static void addTitlePage(Document document)
			throws DocumentException {
		Paragraph preface = new Paragraph();
		// We add one empty line
		addEmptyLine(preface, 1);
		// Lets write a big header
		preface.add(new Paragraph("Title of the document", catFont));

		addEmptyLine(preface, 1);
		// Will create: Report generated by: _name, _date
		preface
				.add(new Paragraph(
						"Report generated by: " + System.getProperty("user.name") + ", " + new Date(), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
						smallBold));
		addEmptyLine(preface, 3);
		preface.add(new Paragraph(
				"This document describes something which is very important ",
				smallBold));

		addEmptyLine(preface, 8);

		preface
				.add(new Paragraph(
						"This document is a preliminary version and not subject to your license agreement or any other agreement with vogella.de ;-).",
						redFont));

		document.add(preface);
		// Start a new page
		document.newPage();
	}

	private static void addContent(Document document) throws DocumentException {
		Anchor anchor = new Anchor("First Chapter", catFont);
		anchor.setName("First Chapter");

		// Second parameter is the number of the chapter
		Chapter catPart = new Chapter(new Paragraph(anchor), 1);

		Paragraph subPara = new Paragraph("Subcategory 1", subFont);
		Section subCatPart = catPart.addSection(subPara);
		subCatPart.add(new Paragraph("Hello"));

		subPara = new Paragraph("Subcategory 2", subFont);
		subCatPart = catPart.addSection(subPara);
		subCatPart.add(new Paragraph("Paragraph 1"));
		subCatPart.add(new Paragraph("Paragraph 2"));
		subCatPart.add(new Paragraph("Paragraph 3"));
		
		// Add a  little list
		createList(subCatPart);

		// Add a small table
		createTable(subCatPart);
		// Now a small table
		

		
		// Now add all this to the document
		document.add(catPart);

		// Next section
		anchor = new Anchor("Second Chapter", catFont);
		anchor.setName("Second Chapter");

		// Second parameter is the number of the chapter
		catPart = new Chapter(new Paragraph(anchor), 1);

		subPara = new Paragraph("Subcategory", subFont);
		subCatPart = catPart.addSection(subPara);
		subCatPart.add(new Paragraph("This is a very important message"));
		
		// Now add all this to the document
		document.add(catPart);

	}

	private static void createTable(Section subCatPart) throws BadElementException {
		Table t = new Table(3,2);

		t.setBorderColor(Color.GRAY);
		t.setPadding(4);
		t.setSpacing(4);
		t.setBorderWidth(1);

		Cell c1 = new Cell("Table Header 1");
		c1.setHeader(true);
		t.addCell(c1);
		c1 = new Cell("Table Header 2");
		t.addCell(c1);
		c1 = new Cell("Table Header 3");
		t.addCell(c1);
		t.endHeaders();
		
		t.addCell("1.0");
		t.addCell("1.1");
		t.addCell("1.2");
		t.addCell("2.1");
		t.addCell("2.2");
		t.addCell("2.3");

		subCatPart.add(t);

	}

	private static void createList(Section subCatPart) {
		List list = new List(true, false, 10);
		list.add(new ListItem("First point"));
		list.add(new ListItem("Second point"));
		list.add(new ListItem("Third point"));
		subCatPart.add(list);
	}

	private static void addEmptyLine(Paragraph paragraph, int number) {
		for (int i = 0; i < number; i++) {
			paragraph.add(new Paragraph(" "));
		}
	}
}

		

The resulting pdf should look like the following.

4. Thank you

Thank you for practicing with this tutorial.

I maintain this tutorial in my private time. If you like the information please help me by using flattr or donating or by recommending this tutorial to other people.

Flattr this

5. Questions and Discussion

Before posting questions, please see the vogella FAQ . If you have questions or find an error in this article please use the www.vogella.de Google Group . I have created a short list how to create good questions which might also help you. .

6. Links and Literature

6.1. Source Code

Source Code of Examples

6.2. iText Resources

http://www.lowagie.com/iText/ iText Homepage

http://itextdocs.lowagie.com/tutorial/ Tutorial from iText homepage, lots of specific examples