Home • ChemFormatter • iText.NET • JFreeChart.NET • ConcatPDF • iTextFront • TIFF2PPT • J by J# • Programming J#
MSN Search

iText.NET

iText .NET
@SourceForge
ライセンス
更新履歴
ダウンロード
使い方
J# Examples
C# Examples
VB.NET Examples
コンパイル
ConcatPDF
iText (Java)
J by J#

SourceForge.net Logo

 

Tutorial: iText by Example

Tables

初めての PdfPTable
iText を領収書、請求書、リスト、レポートなどに使いたいときは、データをタブフォームとして表現したいでしょう。これは、 PdfPTable PdfPCell が作られた理由です。
どちらのクラスも、使い方は簡単です。単に、列の数を指定してテーブルを作成し、セルを加えるだけです。
PdfPTable table = new PdfPTable(3);
PdfPCell cell =
  new PdfPCell(new Paragraph("header with colspan 3"));
cell.setColspan(3);
table.addCell(cell);
table.addCell("1.1");
table.addCell("2.1");
table.addCell("3.1");
table.addCell("1.2");
table.addCell("2.2");
table.addCell("3.2");
document.add(table);
この PDF は次の HTML と同値です。
<table border="1" width="80%" cellpadding="2">
  <tr>
    <td colspan="3">header with colspan 3</td>
  </tr>
  <tr>
    <td>1.1</td>
    <td>1.2</td>
    <td>1.3</td>
  </tr>
  <tr>
    <td>2.1</td>
    <td>2.2</td>
    <td>2.3</td>
  </tr>
</table>
header with colspan 3
1.1 1.2 1.3
2.1 2.2 2.3
Example: java com.lowagie.examples.objects.tables.MyFirstTable
Use a PdfPTable to add a table to a PDF document: see MyFirstTable.pdf

PdfPTable は強力で柔軟なオブジェクトであり、PdfPTable で提供されている機能をつかうというだけでなく、特別な要求にも対応します。JTable をもった Swingアプリケーションがある場合には、JTable2Pdf の節を見てください。PdfPTable は、PDFを作成するときだけ、動作します。HTML や RTF でテーブルを作成する必要があるときには、Table オブジェクト (すでにサポートされていません) を使う必要があります。

先頭に戻る
幅、配置、スペーシング
PdfPTable を Document.add() で加えると、既定では、テーブルの幅は利用可能な幅の80%の大きさで、中央に配置されます。この既定のふるまいは、setWidthPercentage setHorizontalAlignment で変更することができます。
Example: java com.lowagie.examples.objects.tables.TableWidthAlignment
Changing the width and the alignment of the complete table: see TableWidthAligment.pdf
先の例では、テーブルの列数を定義し、iText は、幅のパーセンテージを基準に絶対幅を計算しました。それぞれのセルの既定の絶対幅は、すべてのセルが同じ幅を持つとして、テーブルの絶対幅/列数となります。もちろん、これは変更することができます。これは、さまざまな方法で行うことができます。
  • ほかのコンストラクタを使う: PdfPTable(float[] relativeWidths). 例えば、3番目の列は、通常のカラムの倍にしたいときには、相対比として、float の配列 {1f, 1f, 2f} を指定します。iText は、その絶対幅を計算します。
  • PdfPTable を構築したあとに、setWidths メソッドでこの配列を変更することもできます(注意:この配列の大きさは、列の数と同じでなければなりません)。例では、パーセンテージを (10%, 10%, 5%, 75%) から (20%, 20%, 10%, 50%) に変更しているので、2番目のテーブルの見た目は完全に変わっています。
  • 列の幅を絶対幅で指定したいときには、iText がテーブルの幅の比をそのように計算するように指定しなければなりません。このような場合には、setWidthPercentage(float[] columnWidth, Rectangle pageSize) メソッドを使うべきです。例を見てわかるように、正しいページサイズを得るために、同じような計算をする必要があります。
  • テーブル'全体の幅'をロックすれば、絶対幅をより簡単に指定できます。これをするためには、setTotalWidth setLockedWidth メソッドが必要です。例では、セルの相対幅は、10%, 10%, 5%, 75% でので、二つの 30pt の列、15pt の列、225pt の列となります。

Example: java com.lowagie.examples.objects.tables.CellWidths
Changing the widths of columns: see CellWidths.pdf

既定が変更されていない場合は、テーブル同士は、改行が入らない、限り引っ付いています。これを避けたいときには、setSpacingBefore setSpacingAfter メソッドを使うこともできます。

Example: java com.lowagie.examples.objects.tables.TableSpacing
Defining the spacing between the table and other content: see TableSpacing.pdf
先頭に戻る
PdfPCell の追加
テーブルにセルを追加する最も簡単な方法は、addCell(String text) メソッドを使うことです。最初の例の 'MyFirstTable' では、新たな PdfPCell にいくつかのスタイルを設定したかったので、addCell(PdfPCell cell) を使いました。addCell(String text) を使うと、'既定セル'のレイアウトに従って PdfPCell が内部で生成されます。既定セルのスタイル属性は、getDefaultCell メソッドの助けを借りて変更することができます。これは、addCell(Phrase phrase) でも addCell(String text) と同じように動作します。
table.getDefaultCell().setGrayFill(0.8f);
table.getDefaultCell().setBorderColor(new Color(255, 0, 0));
table.getDefaultCell().setColspan(2);
Example: java com.lowagie.examples.objects.tables.DefaultCell
Using getDefaultCell to change the default style: see DefaultCell.pdf
ネストしたテーブル

前の例で、setColspan メソッドをセルの列スパンを変更するのに使いました。不幸なことに、PdfPTable のデザイン上、行スパンはサポートされていないので、回避法を使う必要があります。セルを異なる行に広げる代わりに、ほかのセルにネストしたテーブルを加えます。addCell(PdfPTable table) を使えばこれができます。

PdfPCell 中のイメージ

最後に、PdfPTable の 'addCell' には addCell(Image image) が残っています。セルに合うようにスケーリングされたイメージを加えるためにこれを使うことができます。PdfPCell(Image image) あるいは setColspanPdfPCell(Image image, boolean fit) で作成されたセルを加えることに似ていますが、例を見てわかるように、若干の違いがあります。

Example: java com.lowagie.examples.objects.tables.ImageCell
Adding an Image to a table: see ImageCell.pdf
External resources for this example: otsoe.jpg
先頭に戻る
Cellheights, -alignment, -padding, -leading, -colors
セルのコンテンツは、既定では上書きされます。これは、setNoWrap(true) で変更することはできますが、見苦しい結果になることもあるので、このオプションは注意深く使わなければなりません。
既定では(nowrap = false)、セルの高さは動的に調整されます。セルの高さは、同じ行の'最も高い'セルと同じ高さとなります。iText は、この高さをコンテンツの行数、改行幅、セル境界などのパラメータを基準にして計算します。ある場合には、このようなことをiTextに制御させず、セルに固定した高さを設定したいこともあります。これは、setFixedHeight メソッドで実現できます。もちろん、コンテンツはセルにはフィットしていませんし、その一部を失うこともあります。
たぶん、やりたいことはそうではなく、たとえコンテンツと適合していなくても、セルの最低の高さを設定したいのでしょう。そのような場合は、setMinimumHeight を使わなければなりません。
最後に、setExtendLastRow という便利なメソッドがあります。これは、テーブルの最後の行をページの最下部まで広げます。
Example: java com.lowagie.examples.objects.tables.CellHeights
Playing with heights of PdfPCells: see CellHeights.pdf
次のsetHorizontalAlignment setVerticalAlignment という名前そのままのメソッドのデモです。水平配置には、次の引数が使えます。
  • Element.ALIGN_LEFT
  • Element.ALIGN_CENTER
  • Element.ALIGN_RIGHT
  • Element.ALIGN_JUSTIFIED
垂直配置には、次の引数が使えます。
  • Element.ALIGN_TOP
  • Element.ALIGN_MIDDLE
  • Element.ALIGN_BOTTOM
  • Element.ALIGN_BASELINE
Example: java com.lowagie.examples.objects.tables.CellAlignment
Changing the alignment of the contents of a PdfPCell: see CellAlignment.pdf

セル境界は、コンテンツと外部セル境界の間の間隔のことです。setPaddingsetPaddingTopsetPaddingRightsetPaddingLeft および setPaddingBottom で、この空白の量を設定できます。
改行幅は、コンテンツの行の間隔のことです。この値は、setLeading(float, float) で設定できます。

Example: java com.lowagie.examples.objects.tables.CellPaddingLeading
Changing the padding and the leading of the contents of a PdfPCell: see PaddingLeading.pdf

セル境界を設定する場合、境界幅はその量には含みませんが、setUseBorderPadding(true) によって、iText にセル境界を境界幅に含ませて計算させることもできます。次の例は、いくつかの色を設定したり、境界やセルを灰色で塗るメソッドのデモです。見てわかるように、緑色のセルのセル境界は、マゼンダ色の境界の幅には含まれていません。青色のセルで、'blue' という語は、シアン色の境界に重なっていません。境界とその色を変更したメソッドのすべては、Rectangle クラスのメソッドです。

Example: java com.lowagie.examples.objects.tables.CellColors
Using some Rectangle methods on PdfPCell: see CellColors.pdf

最後は、setUseAscender setUseDescender というセル内のコンテンツの位置にかかわるメソッドです。例は、この違いを典型的に表しています。

Example: java com.lowagie.examples.objects.tables.TableBorders
Demonstrates different borderstyles: see TableBorders.pdf
上の例では、セル境界の幅と色を変える方法も示しています。
先頭に戻る
複数のページに渡るテーブルの分割法

もしも、相当に大きなテーブルがあったら、ページに収まらないことが予想されます。iText は、テーブルを行間で自動的に分割します。テーブルにページごとに繰り返されるヘッダがあるならば、そのはじめの何行をヘッダとして数えるべきかを伝えなければな りません。これは、setHeaderRows メソッドによって行うことができます。例では、最初の一行がヘッダになっています。

Example: java com.lowagie.examples.objects.tables.AddBigTable
A very big table added with document.add(): see AddBigTable.pdf

前の例では、すべての行はたった一行しかありません。もっとたくさんの行があるテーブルを扱うときには、既定では、テーブルは行の間で分割されるということを知っておかなければな りません。そのため、ある行が現在のページに収まらないときには、その完全な行が次のページに送られ(SplitRowsBetween.pdf 参照)、その行が1ページに収まりきらないときだけ、行は二つに分割されます。
この振る舞いは、setSplitLate(false) を使って変更できます。それを指定すると、行はその場で分割されるようになります。SplitRowsWithin.pdf を見れば、どのページも最大限利用されていることがわかります。
もし、どうしても行を分割したくない場合は、setSplitRows(false) を設定します。しかし、この場合は、大量のデータが失われることになります。(OmitRows.pdf 参照)

例: java com.lowagie.examples.objects.tables.SplitRows
Add a table to a PDF with document.add() によって PDF にテーブルを追加し、セルが収まらないときには、行は二つに分割される:  SplitRowsBetween.pdf SplitRowsWithin.pdf OmitRows.pdf
先頭に戻る
続く
このページでは、PdfPTable を柔軟で便利なオブジェクトにする数多くの機能を見てきました。しかし、数百列とか、数百万行のようなテーブルを扱うための強力な機能が必要ならば、次の章の PdfPTable に関する部分も読んでください。
 
先頭に戻る

Copyright (C) 2001-2007 Kazuya Ujihara. All rights reserved.