、その位置/サイズに関する要素との情報は、あなたがPdfPTable
要素にcalculateWidths
を呼び出すことが許され、一緒に少し混合しました。
iText7では、この機能が分離されているため、レンダリング/レイアウト要素に対してさまざまな柔軟性が提供されます。
したがって、Table
インスタンスの例であるモデル要素は、その位置またはサイズについて何も知らない。 table.getHeight
はtable
には既にHEIGHT
のプロパティが設定されていないため、null
となります。
テーブルの高さを計算するには、レンダリング機能を使用する必要があります。
モデル要素の場合、このモデル要素とすべての子要素を表すレンダラーのサブツリーを取得できます。layout
は任意の領域にレンダリングされます。テーブルの高さを実際に知るためには、要素の内容全体を配置するのに十分であると思われる領域を作成したいと思うでしょう。
PdfDocument pdfDoc = ...
Document doc = ...
Table table = new Table(2)
.addCell(new Cell().add(new Paragraph("cell 1, 1")))
.addCell(new Cell().add(new Paragraph("cell 1, 2")));
LayoutResult result = table.createRendererSubTree().setParent(doc.getRenderer()).layout(
new LayoutContext(new LayoutArea(1, new Rectangle(0, 0, 400, 1e4f))));
System.out.println(result.getOccupiedArea().getBBox().getHeight());
上記のコードは私のため22.982422O
を印刷するが、結果は、要素の構成および特性に応じて変えることができます。
私は、コードの二つの重要な部分を指摘したいと思います:
は、私たちは、これが全体のテーブルを配置するのに十分であろうことを考えると、LayoutArea
の高さとして1e4f
を渡します。テーブルをその高さに配置することができない場合、結果はこの指定された高さを決して超えず、したがってあなたのユースケース(テーブルの全高さを知る)は正しくありません。テーブル全体の配置には十分な高さを渡してください。
.setParent(doc.getRenderer())
ここでは重要な部分があり、継承するプロパティを取得するために使用されます。 table
要素にも多くのプロパティを設定していないことに注意してください。この情報は、この要素が占める領域を知る上で不可欠です。したがって、この情報はlayout
の間に親チェーンから継承されます。あなたは、ドキュメントのフォントを変更することでこれをテストすることができます:document.setFont(newFont);
、フォントサイズ:document.setFontSize(24);
得られた高さ変化を見て
あなたは幅が不明の場合は高さが計算できないことを知っている、あなたはありますか?幅の狭いテーブルは、幅の広いテーブルよりも高さが必要です。幅を設定したことを証明するコードを表示できますか? –
こんにちは、ブライアン、あなたの返信を見て非常に幸せ。 – Schoner
私はあなたの意味を知っていますが、iText5では、これを心配する必要はありません。メソッドを呼び出すだけです。 以下は単純な例です。テーブルの幅を設定し、1つの文字列を追加しますが、それでも高さの値は取得できません。 テーブルテーブル=新しいテーブル(1); table.setWidth(300); table.addCell( "1"); //結果:height = null System.out.println( "height =" + table.getHeight()); – Schoner