web-dev-qa-db-ja.com

iTextSharpテーブルのセル間隔は可能ですか?

ITextSharpのテーブル(PdfPTable)内にセル間隔を設定することは可能ですか?それが可能だとはどこにもわかりません。代わりにiTextSharp.text.Tableを使用するという提案を1つ見ましたが、それは私のバージョンのiTextSharp(5.2.1)では利用できないようです。

11
Nick Reeve

HTMLのような真のセル間隔を探している場合は、いいえ、PdfPTableはそれをネイティブにサポートしていません。ただし、PdfPCellは、セルレイアウトが発生するたびに呼び出されるIPdfPCellEventのカスタム実装をとるプロパティをサポートします。以下はその簡単な実装です。必要に応じて微調整することをお勧めします。

public class CellSpacingEvent : IPdfPCellEvent {
    private int cellSpacing;
    public CellSpacingEvent(int cellSpacing) {
        this.cellSpacing = cellSpacing;
    }
    void IPdfPCellEvent.CellLayout(PdfPCell cell, Rectangle position, PdfContentByte[] canvases) {
        //Grab the line canvas for drawing lines on
        PdfContentByte cb = canvases[PdfPTable.LINECANVAS];
        //Create a new rectangle using our previously supplied spacing
        cb.Rectangle(
            position.Left + this.cellSpacing,
            position.Bottom + this.cellSpacing,
            (position.Right - this.cellSpacing) - (position.Left + this.cellSpacing),
            (position.Top - this.cellSpacing) - (position.Bottom + this.cellSpacing)
            );
        //Set a color
        cb.SetColorStroke(BaseColor.RED);
        //Draw the rectangle
        cb.Stroke();
    }
}

それを使用するには:

//Create a two column table
PdfPTable table = new PdfPTable(2);
//Don't let the system draw the border, we'll do that
table.DefaultCell.Border = 0;
//Bind our custom event to the default cell
table.DefaultCell.CellEvent = new CellSpacingEvent(2);
//We're not changing actual layout so we're going to cheat and padd the cells a little
table.DefaultCell.Padding = 4;
//Add some cells
table.AddCell("Test");
table.AddCell("Test");
table.AddCell("Test");
table.AddCell("Test");

doc.Add(table);
15
Chris Haas

Tableクラスは、PdfPTableを優先して、5.x以降のiTextから削除されました。

間隔に関しては、あなたが探しているのはsetPaddingメソッドです。

詳細については、iTextのAPIをご覧ください。

http://api.itextpdf.com/itext/com/itextpdf/text/pdf/PdfPCell.html

(これはJavaバージョン用ですが、C#ポートはメソッドの名前を維持します)

1
Alexis Pigeon