2013-10-29 112 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

相關問題