2016-08-17 19 views
2

テーブルとセルクラスを使用してiText 7でテーブルを作成すると、テーブルセルにはデフォルトで埋め込みが組み込まれています。私が生成した文書を見ることで分かる限り、それは約2つのPDF単位であるように見えます。iText 7でのデフォルトのセル埋め込み方法

この値を取得して計算に使用する方法はありますか?また、すべてのテーブルのすべてのセルで使用するように自分のパディングを設定できるように、このデフォルトを変更する方法はありますか?すべてのセルで個別に設定する必要はありません。

答えて

3

チュートリアルiText 7: Building Blocksをご覧ください。

Before we startセクションでは、すべてのビルディングブロックがElementPropertyContainerという名前のクラスから派生していることがわかります。このクラスはプロパティのコンテナです。

Cellクラスの場合、パディングを定義する一連のプロパティがあります。

System.out.println(cell.getProperty(Property.PADDING_LEFT)); 
System.out.println(cell.getProperty(Property.PADDING_RIGHT)); 
System.out.println(cell.getProperty(Property.PADDING_TOP)); 
System.out.println(cell.getProperty(Property.PADDING_BOTTOM)); 

をしかし、なぜあなたは、単にBlockElementクラスで提供されて便利なメソッドを使用できるかどうか、それが困難になる:あなたはこのように、これらの特性に一般的な方法(AbstractElementクラスのメソッドを使用して)を取得することができます

System.out.println(cell.getPaddingLeft()); 
System.out.println(cell.getPaddingRight()); 
System.out.println(cell.getPaddingTop()); 
System.out.println(cell.getPaddingBottom()); 

チュートリアルで見ることができるように、CellクラスはBlockElementクラスのサブクラスです。 BlockElementAbstractElementクラスのサブクラスです。 AbstractElementクラスはElementPropertyContainerクラスのサブクラスです。

パディング(または傾けた場合のマージン)を変更する場合は、そのチュートリアルのchapter 5をお読みください。それはCellMarginPaddingという名前の、例があります。

public void createPdf(String dest) throws IOException { 
    PdfDocument pdf = new PdfDocument(new PdfWriter(dest)); 
    Document document = new Document(pdf); 
    Table table = new Table(new float[]{2, 1, 1}); 
    table.setBackgroundColor(Color.ORANGE); 
    table.setWidthPercent(80); 
    table.setHorizontalAlignment(HorizontalAlignment.CENTER); 
    table.addCell(
     new Cell(1, 3).add("Cell with colspan 3") 
      .setPadding(10).setMargin(5).setBackgroundColor(Color.GREEN)); 
    table.addCell(new Cell(2, 1).add("Cell with rowspan 2") 
     .setMarginTop(5).setMarginBottom(5).setPaddingLeft(30) 
     .setFontColor(Color.WHITE).setBackgroundColor(Color.BLUE)); 
    table.addCell(new Cell().add("row 1; cell 1") 
     .setFontColor(Color.WHITE).setBackgroundColor(Color.RED)); 
    table.addCell(new Cell().add("row 1; cell 2")); 
    table.addCell(new Cell().add("row 2; cell 1").setMargin(10) 
     .setFontColor(Color.WHITE).setBackgroundColor(Color.RED)); 
    table.addCell(new Cell().add("row 2; cell 2").setPadding(10) 
     .setFontColor(Color.WHITE).setBackgroundColor(Color.RED)); 
    document.add(table); 
    document.close(); 
} 

これは、それがどのように見えるかです:

enter image description here

私はそれが目少し痛い場合は申し訳ありませんが、しかし、これらの色を使用するように見えましたマージンとパディングの違いを私に説明する最善の方法。

ほとんどのプロパティが継承されます。たとえば、フォントをDivに設定した場合、そのフォントは、Divに追加されたすべての要素のデフォルトフォントになります。しかし、いくつかの例外があります。パッディングはその1つです。これはCellクラスに固有のプロパティのデフォルト値が定義された方法です。

@Override 
public <T1> T1 getDefaultProperty(int property) { 
    switch (property) { 
     case Property.BORDER: 
      return (T1) (Object) DEFAULT_BORDER; 
     case Property.PADDING_BOTTOM: 
     case Property.PADDING_LEFT: 
     case Property.PADDING_RIGHT: 
     case Property.PADDING_TOP: 
      return (T1) (Object) 2f; 
     default: 
      return super.<T1>getDefaultProperty(property); 
    } 
} 

あなたが見ることができるように、完全な細胞のためのパディング値がありません。パッディングはデフォルトで偶然に同一の4つの値で構成されています。

Cellのデフォルトと異なるパディングを定義したくない場合は、Cellのサブクラスを作成してMyCustomCellと呼んでください。 getDefaultProperty()クラスをオーバーライドして、選択したパディングを使用するという意味でカスタム化してください。

このチュートリアルでは、丸みを帯びたコーナーを持つセルを描画するサブクラスの例を見ていますので、丸めコーナーを導入するたびにレンダラーを宣言する必要はありません。

私はそのドキュメントの原著者です。私はあなたがそれが役に立つ

+0

残念ですが、これは私の質問には答えません。私は特に、すべてのセルで個別に設定する必要のないデフォルトのセルのパディングを設定する方法を求めました。私もデフォルトを取得する方法を尋ねましたが、getPaddingLeft()(または何でも)がこれを返さない - 代わりに、生成されたPDFがデフォルトのパディングが明示的に示されていても、 2つのユニットに似た何か。明示的に0に設定すると、この暗黙のパディングは消えます。 –

+0

私はちょうど私の質問の2番目の部分に答えるために試みるあなたの編集を見ましたが、私はこれを行うためにCellをサブクラス化しなければならないことに少し失望しています。暗黙のデフォルトを変更しますか? –

+0

そして、すべてのセルにレンダラーを設定する必要がないようにする、 'Cell'のサブクラスの例を挙げました。また、ボックス*にデフォルトのパディング*がないことを理解していないようです。パディングは4つの値で構成されていますが、これは同じ値でも構いませんが、同一である必要はありません。 –

0

ノーパディングとノーボーダーとしてのデフォルトを設定する@Bruno LowagieオーバーライドルートごとにC#でこれをしたiTextの7でCellおよびその他のオブジェクトに関するこれらおよび他の質問に答えることを願っ:

public class BorderlessCell : Cell 
    { 
     public BorderlessCell(int rowSpan, int colSpan) : base(rowSpan, colSpan) { } 
     public BorderlessCell() : base() { } 
     public override T1 GetDefaultProperty<T1>(int property) 
     { 
      switch (property) 
      { 
       case Property.BORDER: 
        return (T1)(Object)(Border.NO_BORDER); 
       case Property.PADDING_BOTTOM: 
       case Property.PADDING_LEFT: 
       case Property.PADDING_RIGHT: 
       case Property.PADDING_TOP: 
        return (T1)(Object)(0); 
       default: 
        return base.GetDefaultProperty<T1>(property); 
      } 
     } 
    } 
関連する問題