2013-10-29 113 views
1

我想在我的pdf(iText)中添加页眉和页脚。 为此,我创建了一个servlet,并且还创建了一个扩展PdfPageEventHelper的类HeaderandFooter。如何在java中使用iText在pdf中添加页眉和页脚?

public class HeaderAndFooter extends PdfPageEventHelper { 
    public HeaderAndFooter(String name) { 
     super(); 
    } 

    @Override 
    public void onEndPage(PdfWriter writer, Document document) { 
     super.onEndPage(writer, document); 
     //code 

    } 
    @Override 
    public void onStartPage(PdfWriter writer, Document document) { 
     super.onStartPage(writer, document); 
       //code 

    } 
} 

但我不知道我应该写在一个方法,以便它将显示标题任何文本和页脚页面号。

回答

1

看看this example取自iText in Action book

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); 
    } 
} 
+0

谢谢,但是当我使用它时它与我以前的文本重叠。我如何对齐,以便页眉出现在页面顶部,页脚将出现在页面底部。 – Ashish

+0

在'onEndPage'中,您可以将页眉/页脚放置在您选择的绝对位置。您也可以使用“文档”的边距。 –

+0

好的。但锄头可以调用onEndPage()方法。我正在使用 PdfWriter.getInstance(document, response.getOutputStream())。setPageEvent(new HeaderAndFooter(“Employee Management System”)); – Ashish

相关问题