Created
May 17, 2011 21:59
-
-
Save I82Much/977502 to your computer and use it in GitHub Desktop.
itextpdf 5.1.0 header
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* 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); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment