-1

PdfTableJavaで次のページに分割する方法は?

Javaでitextを使用してpdfドキュメントを生成しています。PDFにはヘッダーと表があります。表が次のページに続くと、表の 2 つの行がヘッダーに重なります。次のページのヘッダーの下に残りのテーブル行を表示する方法。ここでは、Header_Footer Java クラスを使用しており、 jspページで Header_Footer のオブジェクトを次のように呼び出しています。

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);
    }
}
`    
4

1 に答える 1

1

問題は、表示されていないコードで解決する必要があります。x = 34、y = 803 の位置にヘッダーを追加しています。次のDocumentようなオブジェクトを作成していると仮定します。

Document document = new Document();

これは、A4 ページと 36 ユーザー単位 (0.5 インチ) の余白を持つドキュメントを作成していることを意味します。

A4 は、ドキュメントの高さが 842 になることを意味します。余白を差し引くと、y = 806 が上余白になります。803 の位置に何かを追加しているので、上部マージンを大きくする必要があります。詳細については、Document クラスのコンストラクターを参照してください。

例えば:

Document document = new Document(PageSize.A4, 36, 36, 72, 36);
于 2013-05-13T07:08:41.197 に答える