1

ドキュメントの本文とドキュメントのページ ヘッダーのPdfPTableを作成するために、まったく同じコードが使用されます。テーブルは本体で適切にレンダリングされますが、ヘッダーのsetRowspan値が考慮されていないようです。

以下に、生成された pdf のスクリーンショットと、pdf の生成に使用された最小限のスタンドアロン プログラムを貼り付けます。

PDF出力

ここに画像の説明を入力

コード

import java.io.*;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;

class HeaderAndFooter extends PdfPageEventHelper{

    private PdfPTable header;

    public HeaderAndFooter() throws Exception {
        header = FooMain.createTable();
        header.setTotalWidth(530);
    }

    @Override
    public void onEndPage(PdfWriter writer, Document document) {
        PdfContentByte cb = writer.getDirectContent();
        float x   = document.leftMargin();
        float hei = header.getTotalHeight();
        float y   = document.top()+hei;
        header.writeSelectedRows(0, -1, x , y, cb);
    }
}

public class FooMain {

    public static void main(String[] args) throws Exception {
        Document doc = new Document(PageSize.A4, 30, 30, 150, 40);
        PdfWriter writer = PdfWriter.getInstance(doc, new FileOutputStream("./brokenTableInHeader.pdf"));
        writer.setPageEvent(new HeaderAndFooter());
        doc.open();
        doc.add(createTable());
        doc.close();
    }

    public static PdfPTable createTable() throws Exception {
        PdfPTable table = new PdfPTable(2);
        PdfPCell cell = new PdfPCell(new Phrase("cell spanning two rows")); 
        cell.setRowspan(2);
        table.addCell(cell);
        table.addCell( new Phrase ("a"));
        table.addCell( new Phrase ("b"));
        return table;
    }
}
4

1 に答える 1

1

このSOの質問で答えを見つけました(PdfPTable :: writeSelectedRows の代わりに ColumnText :: go使用ください)

これが私の作業コードからの抜粋です。

ColumnText column = new ColumnText(writer.getDirectContent());
column.addElement(footer);
column.setSimpleColumn (0, 0, 630, 80);
column.go();
于 2013-04-19T06:57:02.747 に答える