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

PdfPTable

絶対位置への PdfPTable の追加
前章に記述したように、PdfPTable は、Document.add() で追加できますが、writeSelectedRows メソッドによってPdfPTableを絶対位置に書き込むこともできます。オブジェクトを絶対位置へ追加するしくみについては、チュートリアルのPart IVに記述します。今知っておかなければならないことは、メソッドの次のパラメータです。
  • rowStart - 書き始める0から始まる行目
  • rowEnd - 最後の行目+1。-1のときは、最後の行までかかれます
  • xPos - 書かれるテーブルの左上の x 座標
  • yPos - 書かれるテーブルの左上の y 座標 (注意: 0がページの最下部であることはFAQで説明した)
  • canvas - 行が書かれる PdfContentByte (チュートリアルのPart IVで説明)
Example: java com.lowagie.examples.objects.tables.pdfptable.WriteSelectedRows
Demonstrates the writeSelectedRows method: see WriteSelectedRows.pdf
Example: java com.lowagie.examples.objects.tables.pdfptable.Tables
Adds a table to an absolute position: see tables.pdf

例を見てわかるように、writeSelectedRows を使う時にはいくつかの注意事項がある。 PdfPTable を document.add() によって加える時には、テーブルの幅は、常に現在のポインタの利用可能なページ幅のパーセンテージから計算されていた(例の、2ページ目を参照)。しかし、PdfPTable を絶対位置へ追加するときには、iText は、ページの残りについて何も知ることはできない。利用可能な幅とは何をさす? これが、iTextがなにもできない理由のひとつです。そのため、setTotalWidth(float totalWidth) setTotalWidth(float[] columnWidth) メソッドによってテーブルの全幅を設定しなければなりません。
また、PdfPTableがページに収まっているかもチェックする責任はあなたにあります。5ページ目の100-150行目は、y = 820 の代わりに y = 200 で始まっているため、ページに収まっていません。112-149 は書かれてはいるのですが、ページの可視領域の外側なので見ることはできません。
例を見ると、非常に多くの行をページに収めなければならないようなときに、writeSelectedRows(int rowStart, int rowEnd, float xPos, float yPos, PdfContentByte canvas) をテーブルを複数ページに渡って水平に分割するために使うことができることがわかります。テーブルの幅が広い場合も、同じように垂直に分割できます。writeSelectedRows(int colStart, int colEnd, int rowStart, int rowEnd, float xPos, float yPos, PdfContentByte canvas) というメソッドがこれをします。

Example: java com.lowagie.examples.objects.tables.pdfptable.SplitTable
Demonstrates how to split a Table in two sections of columns: see SplitTable.pdf
先頭に戻る
巨大テーブルのためのメモリマネージメント
巨大なテーブルを使うときには、非常に気をつけなければならないことがある。オブジェクトを Document に加える時には、そのオブジェクトは'できるだけ早く'出力ストリームに書き込まれる。 オブジェクトは、書き込まれて初めてデストラクトされる資格を得る。しかし、PdfPTable にセルを加え続け、そのテーブルを文書に加えずにおくと、PdfPTable オブジェクトは大きくなり続けて、開放できないメモリがどんどん増えていきます。非常に大きいテーブルを作成するときには、これは深刻な問題となります。
次の例は、テーブルを分割する方法を示しています。テーブルは、生成されるテーブルはお互いに引っ付いているので(ここでは、setSpacingBefore setSpacingAfter は使わないように)、ひとつの大きなテーブルなのか、小さくわけられた複数のテーブルなのかは、見た目ではわかりません。
Example: java com.lowagie.examples.objects.tables.pdfptable.FragmentTable 50
Break one large Table up into different smaller tables with the same header: see FragmentTable.pdf
先頭に戻る
セルとテーブルのイベント
Chunkクラスを思い出してください。PageEvent で一般的な方法で、アプリケーション固有の機能をどうやって付け加えたでしょう? PdfPCellEvent を使うことにより PdfPCell にも同じことができます。例では、コンテンツを上書きして、左下から右上の角まで線が引かれています。チュートリアル Part IV で説明するメソッドを使うことにより、PDF シンタックスでできるほとんどすべてのレイアウトを作成できます。それは、cellLayout メソッドを実装するだけです。そこでは、パラメータとしてセルそのものと、ページ上のセルの絶対位置を保持する Rectangle オブジェクトを得ることができます。PdfContentByte 配列については、さらに説明が必要です。
Example: java com.lowagie.examples.objects.tables.pdfptable.CellEvents
Demonstrates what one can do with cell events: see CellEvents.pdf
External resources for this example: otsoe.jpg
完成したテーブルの上に同じ種類のコントロールがほしいときには、少々複雑になる。PdfPTableEvent インターフェイスの tableLayout メソッドを実装しなければならない。
Example: java com.lowagie.examples.objects.tables.pdfptable.TableEvents1
Demonstrates what one can do with table events: see TableEvents1.pdf
Example: java com.lowagie.examples.objects.tables.pdfptable.TableEvents2
Demonstrates what one can do with table events (cells with colspan > 1): see TableEvents2.pdf
In the next example cell and table events are combined to simulate cellspacing.
Example: java com.lowagie.examples.objects.tables.pdfptable.FloatingBoxes
Demonstrates how to simulate cellspacing as in HTML: see FloatingBoxes.pdf
先頭に戻る
縦書きテキスト
最後に、これまでメーリングリストでたびたび出てきた質問、セルに縦書きテキストは書けるか? 答えは、はいです。しかし、PdfTemplate クラス(チュートリアルのダイレクトコンテンツで説明する)をどのようにして使うかについて知っておかなければならない。それを見るのを待てないならば、次の例を見てみてください。
Example: java com.lowagie.examples.objects.tables.pdfptable.VerticalTextInCells
Demonstrates how to add vertical text in a cell: see VerticalText.pdf
先頭に戻る

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