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

 

カラムテキスト

カラム
iText で、製品シート、論文、新聞などを作りたいようなときには、データを段組して表現したいでしょう。これが、ColumnText MultiColumnText が作られた理由です。
これらのオブジェクトは、与えられた四角形(あるいは、ユーザ定義の不定形)の中にコンテンツを加え、その四角形の右端に到達すると自動的に折り返されます(あるいは、その不定形に収まるようにフォーマットされます)。すべてのコンテンツが収まらないときには表示されませんが、コンテンツ自身は、カラムオブジェクトに残っているので、次のカラムに表示するようにもできます。

カラムテキスト
座標 (100, 300)~(200, 500) の四角形の中に、中央揃えで phrase を表示するには、次のようなコードを書きます。
PdfContentByte cb = writer.getDirectContent();
ColumnText ct = new ColumnText(cb);
ct.setSimpleColumn(phrase,
  100, 300, 200, 500, 15,
  Element.ALIGN_CENTER);
ct.go();
setSimpleColumn(com.lowagie.text.Phrase, float, float, float, float, float, int) という特別なメソッドは、Phrase の中にあるコンテンツでのみ働きますが、ColumnText クラスには、インデントを指定するものなど、数多くのメソッドがあります。
Example: java com.lowagie.examples.objects.columns.Column
Defining a simple single object ColumnText object: see column.pdf

テキストすべてをひとつのPhraseオブジェクトにまとめて加える必要はありません。setSimpleColumn(float, float, float, float, float) あるいは setSimpleColumn(float, float, float, float, float, int) で最初に四角形を定義し、addText(com.lowagie.text.Chunk) addText(com.lowagie.text.Phrase) でテキストを加え、go() メソッドでカラムを表示することもできます。

PdfContentByte cb = writer.getDirectContent();
ColumnText ct = new ColumnText(cb);
ct.setSimpleColumn(60, 300, 100, 500, 15, Element.ALIGN_CENTER);
ct.addText(phrase1);
ct.addText(phrase2);
ct.addText(chunk);
ct.go();
Example: java com.lowagie.examples.objects.columns.ColumnSimple
Adding phrases to a simple ColumnText object: see columnsimple.pdf
Of course, if there is more text than space in the rectangle, we don't want to loose the text that didn't fit. Maybe we want this text to be shown in another column. That's why we are going to take a look at the return value of the go()-method. If this return value has the flag 'NO_MORE_COLUMN' turned on, there wasn't enough room for the text in the column. If all the text was shown, the flag 'NO_MORE_TEXT' is on.
go() causes (partial or complete) content to be written to the document. If you first want to check if the content will fit the rectangle you defined, use go(true) instead of go(). This will simulate adding content. Check if NO_MORE_TEXT or NO_MORE_COLUMN is returned and decide if you actually want to add the column or if you want to change its size first.
The next example gives you a column to which all kinds of objects were added with method addElement(com.lowagie.text.Element).

もちろん、その四角形にテキストが収まらないならば、収まらない分だけテキストは失われます。たいていは、このテキストは、ほかのカラムに表示したいでしょう。これが、go() メソッドの戻り値を参照する理由です。この戻り値に、'NO_MORE_COLUMN' フラグがたっていたならば、カラムにテキストを収めるだけの余地がなかったことを表します。テキストをすべて表示できた場合には、'NO_MORE_TEXT'フラグがたちます。
go() は、(部分的あるいは全体の)コンテンツを文書に書き込んでしまいます。書き込まれる前に、コンテンツが定義された四角形の中に収まるかを確かめたいときには、go() の代わりに、go(true) を使います。これは、コンテンツの追加をシミュレートして、NO_MORE_TEXT あるいは、NO_MORE_COLUMN を返し、それによって、カラムに実際にテキストを加えることを判断したり、その四角形の大きさを変更したりできます。
次の例では、 addElement(com.lowagie.text.Element)メソッドで加えることができる、すべての種類のオブジェクトを示します。
次の例では、カラムに addElement(com.lowagie.text.Element) メソッドで追加するすべての種類のオブジェクトを示します。

Example: java com.lowagie.examples.objects.columns.ColumnObjects
Adding different objects to a simple ColumnText object: see columnobjects.pdf
External resources for this example: cover.png

ColumnText は、ユーザ定義の不定形にコンテンツを収めるためにも使うことができます。setColumns(float[], float[]) メソッドを使い、テキストの左あるいは右の境界を定義します。

float[] left  = {70,790, 70,60};
float[] right = {300,790, 300,700, 240,700, 240,590, 300,590, 300,106, 270,60};
ct.setColumns(left, right);
左の境界は、直線 (x = 70) ですが、右の境界は、不規則です。
Example: java com.lowagie.examples.objects.columns.ColumnIrregular
Defining an irregular ColumnText object: see columnirregular.pdf
External resources for this example: caesar_coin.jpg
マルチカラムテキスト

複数のカラムに自動的に加えたいようなときには、MultiColumnText クラスが使えます。これは、ColumnText のラッパークラスですが、多くの働きがあります。addRegularColumns(left, right, gutterWidth, numColumns) によって、ページあたりの カラム数 numColumns とその間隔 gutterWidth を定義します。最初のカラムは左側に left の余白が、最後のカラムは右側に right の余白があります。iTextに、複数ページにわたってカラムの配置を任せるなら、次のようにオブジェクトを作成します。

MultiColumnText mct = new MultiColumnText();
そうでなければ、カラムの高さと Y 座標を指定し、さらにすべてのテキストが表示されたかどうかをチェックしなければならない。
Example: java com.lowagie.examples.objects.columns.MultiColumnSimple
Defining a simple MultiColumnText object: see multicolumnsimple.pdf
なにか理由があって、カラムを右から左に加えていきたいならば、次の例のようにします。
Example: java com.lowagie.examples.objects.columns.MultiColumnR2L
Defining a MultiColumnText object that adds its columns from right to left: see multicolumnR2L.pdf

MultiColumnText も、不定形カラムに使うことができます。ひとつあるいはそれ以上のカラムを addColumn(float[], float[]) で加えて、ColumnText.setColumns(float[], float[]) でその振る舞いを指定します。

Example: java com.lowagie.examples.objects.columns.MultiColumnIrregular
Defining an irregular MultiColumnText object: see multicolumnirregular.pdf
この最後の例では、前とは違うコンストラクタを使いました。異なるページに渡って自動配置(そして、PageEvent を使って ダイヤ型を埋め込む)を行うことができますが、その代わりに次のようにMultiColumnTextオブジェクトを作成することができます。
MultiColumnText mct = new MultiColumnText(document.top() - document.bottom());
パラメータは、カラムの最大高を定義します。このようにすると、カラムは自動的には次のページに配置されなくなります! 次のようなループが必要になります。
while (mct.hasMoreText()) {
    document.add(mct);
    mct.nextColumn();
    document.newPage();
}
先頭に戻る

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