|
|
@@ -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); |
|
|
} |
|
|
} |