iText5.1.0在文档中设置页眉和页脚

我使用servlet来查看pdf文件,使用响应setContentType pdf。

我想设置由IText 5.1.0生成的文档的页眉和页脚。

请帮忙..

暂时忘掉servlet。 确保您可以在本地使用页眉/页脚。

编辑:通过发布过时的HeaderFooter内容,我是一个糟糕的SO用户。 似乎很多人都这样做,因此很难找到这个问题的简洁例子。 使用iText将标题添加到pdf回答此问题。

这似乎是正确的方法:(从http://itextpdf.com/examples/iia.php?id=104修改): 在此处输入图像描述 https://gist.github.com/977502

/* * 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); } }