Skip to content

Instantly share code, notes, and snippets.

@stepenik
Forked from I82Much/MovieCountries1.java
Created March 27, 2019 21:43
Show Gist options
  • Save stepenik/32b375e51eadc96e1f8d304ba1827ece to your computer and use it in GitHub Desktop.
Save stepenik/32b375e51eadc96e1f8d304ba1827ece to your computer and use it in GitHub Desktop.

Revisions

  1. @I82Much I82Much created this gist May 17, 2011.
    147 changes: 147 additions & 0 deletions MovieCountries1.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,147 @@
    /*
    * This class is part of the book "iText in Action - 2nd Edition"
    * written by Bruno Lowagie (ISBN: 9781935182610)
    * For more info, go to: http://itextpdf.com/examples/
    * This example only works with the AGPL version of iText.
    *
    * Modified by Nick Dunn (http://developmentality.wordpress.com) to
    * focus on just the PDF header aspect.
    */

    package part1.chapter05;

    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Set;
    import java.util.TreeSet;

    import com.itextpdf.text.Document;
    import com.itextpdf.text.DocumentException;
    import com.itextpdf.text.Element;
    import com.itextpdf.text.ExceptionConverter;
    import com.itextpdf.text.Image;
    import com.itextpdf.text.PageSize;
    import com.itextpdf.text.Paragraph;
    import com.itextpdf.text.Phrase;
    import com.itextpdf.text.Rectangle;
    import com.itextpdf.text.pdf.ColumnText;
    import com.itextpdf.text.pdf.PdfPCell;
    import com.itextpdf.text.pdf.PdfPTable;
    import com.itextpdf.text.pdf.PdfPageEventHelper;
    import com.itextpdf.text.pdf.PdfTemplate;
    import com.itextpdf.text.pdf.PdfWriter;

    public class MovieCountries1 {

    /** The resulting PDF file. */
    public static final String RESULT
    = "example_result.pdf";

    /**
    * Inner class to add a table as header.
    */
    class TableHeader extends PdfPageEventHelper {
    /** The header text. */
    String header;
    /** The template with the total number of pages. */
    PdfTemplate total;

    /**
    * Allows us to change the content of the header.
    * @param header The new header String
    */
    public void setHeader(String header) {
    this.header = header;
    }

    /**
    * Creates the PdfTemplate that will hold the total number of pages.
    * @see com.itextpdf.text.pdf.PdfPageEventHelper#onOpenDocument(
    * com.itextpdf.text.pdf.PdfWriter, com.itextpdf.text.Document)
    */
    public void onOpenDocument(PdfWriter writer, Document document) {
    total = writer.getDirectContent().createTemplate(30, 16);
    }

    /**
    * Adds a header to every page
    * @see com.itextpdf.text.pdf.PdfPageEventHelper#onEndPage(
    * com.itextpdf.text.pdf.PdfWriter, com.itextpdf.text.Document)
    */
    public void onEndPage(PdfWriter writer, Document document) {
    PdfPTable table = new PdfPTable(3);
    try {
    table.setWidths(new int[]{24, 24, 2});
    table.setTotalWidth(527);
    table.setLockedWidth(true);
    table.getDefaultCell().setFixedHeight(20);
    table.getDefaultCell().setBorder(Rectangle.BOTTOM);
    table.addCell(header);
    table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);
    table.addCell(String.format("Page %d of", writer.getPageNumber()));
    PdfPCell cell = new PdfPCell(Image.getInstance(total));
    cell.setBorder(Rectangle.BOTTOM);
    table.addCell(cell);
    table.writeSelectedRows(0, -1, 34, 803, writer.getDirectContent());
    }
    catch(DocumentException de) {
    throw new ExceptionConverter(de);
    }
    }

    /**
    * Fills out the total number of pages before the document is closed.
    * @see com.itextpdf.text.pdf.PdfPageEventHelper#onCloseDocument(
    * com.itextpdf.text.pdf.PdfWriter, com.itextpdf.text.Document)
    */
    public void onCloseDocument(PdfWriter writer, Document document) {
    ColumnText.showTextAligned(total, Element.ALIGN_LEFT,
    new Phrase(String.valueOf(writer.getPageNumber() - 1)),
    2, 2, 0);
    }
    }

    /**
    * Creates a PDF document.
    * @param filename the path to the new PDF document
    * @throws DocumentException
    * @throws IOException
    * @throws SQLException
    */
    public void createPdf(String filename)
    throws IOException, DocumentException, SQLException {

    // step 1
    Document document = new Document(PageSize.A4, 36, 36, 54, 36);
    // step 2
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(RESULT));
    TableHeader event = new TableHeader();
    writer.setPageEvent(event);
    // step 3 - fill in the document
    document.open();

    event.setHeader("Hello!");
    document.add(new Paragraph("Testing."));
    document.newPage();
    event.setHeader("There!");
    document.add(new Paragraph("Testing."));

    document.close();
    }

    /**
    * Main method.
    *
    * @param args no arguments needed
    * @throws DocumentException
    * @throws IOException
    * @throws SQLException
    */
    public static void main(String[] args)
    throws IOException, DocumentException, SQLException {
    new MovieCountries1().createPdf(RESULT);
    }
    }
    3 changes: 3 additions & 0 deletions README
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,3 @@
    See http://itextpdf.com/book/chapter.php?id=5 for more information on table headers.

    http://stackoverflow.com/questions/5062898/add-header-to-pdf-using-itext