PDF シンタックス
PDF シンタックスは、次のようなものです。
すべてのメソッドは、この章で説明されています。
先頭に戻る0.3 g 15.000 27.000 m 7.947 5.292 l 26.413 18.708 l 3.587 18.708 l 22.053 5.292 l f 45.000 57.000 m 37.947 35.292 l 56.413 48.708 l 33.587 48.708 l 52.053 35.292 l f 0.7 g 15.000 57.000 m 7.947 35.292 l 26.413 48.708 l 3.587 48.708 l 22.053 35.292 l f 45.000 27.000 m 37.947 5.292 l 56.413 18.708 l 33.587 18.708 l 52.053 5.292 l f上の例は、ページの左下の角に二つのグレースケールの四つの小さな星を描画しています。iText では、PdfContentByte.setLiteral のようなメソッドを使って、このシンタックスすべてを手書きすることもできますが、私の信じるところでは、それは容易ではありません。スクラッチから完全な PDF を書きたいなら、すべてのオブジェクトについてそれが何バイト目にあるかを知っておく必要があります。最初の例では、普通のテキストエディタでこの PDF を読むことができるように compression を false に設定しました。PDF の手書きはやらないほうがいいでしょう。
Example: java
com.lowagie.examples.directcontent.graphics.Literal
Writing PDF Syntax directly to iText: see literal.pdf
例では、PDF シンタックスを
setGrayFill(float)(g で終わる線)、moveTo(float, float)(m で終わる線)、lineTo(float, float)(l で終わる線)、fill()(f)といった iText の
簡単なメソッドを使って生成しています。 Writing PDF Syntax directly to iText: see literal.pdf
すべてのメソッドは、この章で説明されています。
グラフィックスステート
グラフィックスステートは、各ページの最初に初期化されます。現在の色(塗りつぶしのためにひとつ、筆書きのためにひとつあります)、現在の線幅、現在のダッシュパターンなど、すべてのパラメータには、デフォルトがあります。iText
では、これらのデフォルトのほどんどを
PdfContentByte クラスのメソッドで変更することができます。いくつかのパラメータは、特別な
PdfDictionary(グラフィックスステートディクショナリー)であり
PdfGState オブジェクトを使って変更します。
グラフィックスステートは、スタックに保存されています。グラフィックスステートを変更するなら、現在のステートを PdfContentByte.saveState() で保存し、その後 PdfContentByte.restoreState() で元に戻すことができます。
次の例は、PdfGState オブジェクトを使ったステートの変更法を示しています。
先頭に戻るグラフィックスステートは、スタックに保存されています。グラフィックスステートを変更するなら、現在のステートを PdfContentByte.saveState() で保存し、その後 PdfContentByte.restoreState() で元に戻すことができます。
Example: java
com.lowagie.examples.directcontent.graphics.State
Changing the Graphics State with saveState and restoreState: see state.pdf
例では、半径250ポイントの円を描いています。デフォルトの塗りつぶし色が黒であることが分かります。Changing the Graphics State with saveState and restoreState: see state.pdf
cb.circle(260.0f, 500.0f, 250.0f); cb.fill();次に、ステートを保存し、塗りつぶし色を赤に変更します。
cb.saveState(); cb.setColorFill(Color.red); cb.circle(260.0f, 500.0f, 200.0f); cb.fill();半径200ポイントの円は、赤色で描かれます。この二番目のステートを保存し、塗りつぶし色を青に変更します。
cb.saveState(); cb.setColorFill(Color.blue); cb.circle(260.0f, 500.0f, 150.0f); cb.fill();半径150ポイントの円は、青色で描かれます。ステートを(塗りつぶし色が赤の)二番目のステートに戻します。
cb.restoreState(); cb.circle(260.0f, 500.0f, 100.0f); cb.fill();見て分かるように、半径100ポイントの円が赤色で描かれました。もともとのステートに戻すと、半径50ポイントの円が描かれます。
cb.restoreState(); cb.circle(260.0f, 500.0f, 50.0f); cb.fill();Remark that the saveState と restoreState の数はあわせなければならないことは、注意してください。saveState を呼び出す前に、グラフィックスステートを戻そうとすると、例外が発生します。
次の例は、PdfGState オブジェクトを使ったステートの変更法を示しています。
Example: java
com.lowagie.examples.directcontent.graphics.GState
Changing the Graphics State with setGState: see gstate.pdf
Changing the Graphics State with setGState: see gstate.pdf
パラメータを変更するメソッド
PDF Reference Manual (4.3節) の Table 4.2 と 4.3
にグラフィックスステートで利用可能なすべてのパラメータが与えられています。次のテーブルに、これらのパラメータを列挙します。iText
では(そのようなメソッドが可能なら)これらの値を変更するためのメソッドを追加していきます。
先頭に戻る
デバイス独立グラフィックスステートパラメータ
デバイス独立グラフィックスステートパラメー
| 刷り重ね | setOverPrintStroking(boolean) および setOverPrintNonStroking(boolean) |
| 刷り重ねモードmode | 未実装 |
| black generation | 未実装 |
| undercolor removal | 未実装 |
| transfer | 未実装 |
| halftone | 未実装 |
| flatness |
setFlatness(float) パラメータは、デバイスピクセル単位の距離。 |
| smootness | 未実装 |
パスの構築と描画
構築
PDF Reference Manual 4.4 節(194ページ)で、パスが取り扱われています。パスは形、軌道、領域と呼べるものすべてを定義します。これらは、線の描画、塗りつぶす形の定義、ほかのグラフィックスをクリップするための境界を指定するために使われます。Reference Manual 表 4.9 に、パス構築演算子の総覧が与えられています。次のテーブルに、これらの演算子と iText の PdfContentByte クラスにおける対応するメソッドを示します。
簡単に使えるように、iText には、いくつかの拡張メソッドが加えられています。
- circle(float, float, float)、ellipse(float, float, float, float)、arc(float, float, float, float, float, float) は、名前に応じたカーブを描きます。
-
rectangle(com.lowagie.text.Rectangle) は、rectangle(float, float, float, float)
で四角形を描くだけでなく、ある色で塗りつぶし、クラスの属性に従った処理をします。
同じことを、variableRectangle(com.lowagie.text.Rectangle) でもします。
描画
パスがパスを描画しないということを理解することは非常に重要です! パスを構築しても、PDF
インタプリタがどうされるのかは知りません。描画したいなら、パス描画演算子を使わなければなりません。それらの演算子は、Reference
Manual の表 4.10 に列挙されています。ここに、そその対応する iText のメソッドを列挙します。| S | stroke() |
| s | closePathStroke() |
| f | fill() |
| F | 使われていない(と reference manual に書かれている) |
| f* | eoFill() |
| B | fillStroke() |
| B* | eoFillStroke() |
| b | closePathFillStroke() |
| b* | closePathEoFillStroke() |
| n | newPath() |
PdfContentByte を使う
これまでに説明したメソッドのいくつかを使ったデモです。
Example: java
com.lowagie.examples.directcontent.graphics.Circles
Draws some concentric circles: see circles.pdf
Draws some concentric circles: see circles.pdf