2013-05-13 6 views
-1

Как разбить PdfTable на следующей странице в Java?Разделить PdfTable на следующей странице

Я генерирую pdf документ с использованием itext в java. PDF имеет заголовок и таблицу. Когда таблица переходит к следующей странице, две строки таблицы перекрываются в заголовке. Как отобразить оставшиеся строки таблицы под заголовком на следующей странице. Здесь я использую Header_Footer класса Java и вызвать объект Header_Footer на странице JSP, как-

Header_Footer event = new Header_Footer(); 
writer.setPageEvent(event); 

Мой класс Header_Footer это дать ниже

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package mis4acjml; 
import java.io.FileOutputStream; 
import java.io.IOException; 
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; 
/** 
* 
* @author kanika 
*/ 
public class Header_Footer extends PdfPageEventHelper{ 
    String header; 
    PdfTemplate total; 
    /** 
     * Allows us to change the content of the header. 
     * @param header The new header String 
     */ 
    public Header_Footer() 
    { 
     header="The Assam Co-operative Jute Mills Ltd."; 
    } 
    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); 
    } 
} 
`  

ответ

1

проблему необходимо решить в коде, который вы не показываете. Вы хотите добавить заголовок в позиции х = 34, у = 803. Я предполагаю, что вы создаете Document объект вроде этого:

Document document = new Document(); 

Это означает, что вы создаете документ со страницами формата А4 и полями 36 пользовательские единицы (полдюйма).

A4 означает, что высота документа будет равна 842. Если мы выставим разницу, мы будем иметь y = 806 как верхний край. Когда вы добавляете что-то в позицию 803, вам нужно большее преимущество. См. constructor of the Document class для получения дополнительной информации.

Например:

Document document = new Document(PageSize.A4, 36, 36, 72, 36); 
+0

Спасибо. Теперь он работает. – user1407310