はじめに
ちょっとやるべきことがあって,PDF を扱う CPANモジュール PDF::API2::Lite を少しかじってみました.
以下,かじってみたメソッドについてまとめてみます.「???」な部分はスルーしちゃって下さい.
基本的(?)なメソッド
$pdf = PDF::API2::Lite->new
PDF::API2::Lite インスタンスを生成します.以下,$pdf は同インスタンスを表すものとします.
$pdf->page( $w, $h )
幅 $wpx,高さ $hpx のページを新たに生成します.
$pdf->saveas( $file )
$file という名前で PDF を保存します.
$font = $pdf->corefont( $fontname )
PDF::API2::Resource::Font::CoreFont インスタンス) を生成します.
以下,$font は???
$font = $pdf->ttfont( $ttfile )
$ttfile で指定した TrueType フォントの情報を持ったフォントオブジェクト (PDF::API2::Resource::CIDFont::TrueType インスタンス) を生成します.
以下,$font は???
画像関連のメソッド
$img = $pdf->image_jpeg( $file )
$file で指定した JPEG 画像の情報を持ったオブジェクト (PDF::API2::Resource::XObject::Image::JPEG インスタンス) を生成します.
以下,$img は???
$img = $pdf->image_png( $file )
$file で指定した PNG 画像の情報を持ったオブジェクト (PDF::API2::Resource::XObject::Image::PNG インスタンス) を生成します.
以下,$img は???
描画関連のメソッド: 基本
$pdf->fillcolor( $color )
描画における塗りつぶしの色,テキストの色を $color に設定します.
$color で指定できる色の名前やフォーマットについては以下のとおり.
色の名前
aliceblue, antiquewhite, aqua, aquamarine, azure, beige, bisque, black, blanchedalmond, blue, blueviolet, brown, burlywood, cadetblue, chartreuse, chocolate, coral, cornflowerblue, cornsilk, crimson, cyan, darkblue, darkcyan, darkgoldenrod, darkgray, darkgreen, darkgrey, darkkhaki, darkmagenta, darkolivegreen, darkorange, darkorchid, darkred, darksalmon, darkseagreen, darkslateblue, darkslategray, darkslategrey, darkturquoise, darkviolet, deeppink, deepskyblue, dimgray, dimgrey, dodgerblue, firebrick, floralwhite, forestgreen, fuchsia, gainsboro, ghostwhite, gold, goldenrod, gray, grey, green, greenyellow, honeydew, hotpink, indianred, indigo, ivory, khaki, lavender, lavenderblush, lawngreen, lemonchiffon, lightblue, lightcoral, lightcyan, lghtgoldenrodyellow, lightgray, lightgreen, lightgrey, lightpink, lightsalmon, lightseagreen, lightskyblue, lightslategray, lightslategrey, lightsteelblue, lightyellow, lime, limegreen, linen, magenta, maroon, mediumaquamarine, mediumblue, mediumorchid, mediumpurple, mediumseagreen, mediumslateblue, mediumspringgreen, mediumturquoise, mediumvioletred, midnightblue, mintcream, mistyrose, moccasin, navajowhite, navy, oldlace, olive, olivedrab, orange, orangered, orchid, palegoldenrod, palegreen, paleturquoise, palevioletred, papayawhip, peachpuff, peru, pink, plum, powderblue, purple, red, brown, royalblue, saddlebrown, salmon, sandybrown, seagreen, seashell, sienna, silver, skyblue, slateblue, slategray, slategrey, snow, springgreen, steelblue, tan, teal, thistle, tomato, turquoise, violet, wheat, white, whitesmoke, yellow, yellowgreen
PDF::API2::Lite – lite pdf creation – search.cpan.org
RGB 表記
#rgb, #rrggbb, #rrrgggbbb and #rrrrggggbbbb
PDF::API2::Lite – lite pdf creation – search.cpan.org
CMYK 表記
%cmyk, %ccmmyykk, %cccmmmyyykkk and %ccccmmmmyyyykkkk
PDF::API2::Lite – lite pdf creation – search.cpan.org
HSL 表記
&hsl, &hhssll, &hhhssslll and &hhhhssssllll
PDF::API2::Lite – lite pdf creation – search.cpan.org
HSV 表記
!hsv, !hhssvv, !hhhsssvvv and !hhhhssssvvvv
PDF::API2::Lite – lite pdf creation – search.cpan.org
$pdf->strokecolor( $color )
描画における線,輪郭(?)の色を $color に設定します.
$color で指定できるフォーマットは上と同様です.
$pdf->linewidth( $width )
描画における線,輪郭(?)の幅を $widthpx に設定します.
$pdf->transform( %opts )
描画の基準情報を %opts で与えます.設定した情報は,再度設定しない限り維持されるようです.
主なオプション (%opts の具体的な内容) については次のとおり.
-transrate => [ $x, $y ]
描画の基準となる座標を ($x, $y) に設定します.なお,$x,$y には前回設定時からの相対的な値が入るようです.
-rotate => $rot
水平方向に対する回転角度を $rot° に設定します.
-scale => [ $sx, $sy ]
描画対象の倍率を水平方向 $sx倍,垂直方向 $sy倍に,それぞれ設定します.
描画関連のメソッド: グラフィクス
$pdf->move( $x, $y )
描画の基準となる座標を ($x, $y) に設定します.
$pdf->line( $x, $y )
基準座標から座標 ($x, $y) への直線を描画するための情報を蓄えます.そして,座標 ($x, $y) が新たな基準座標となります.
なお,このメソッドは描画情報を蓄えるのみで,描画は行いません.
$pdf->curve( $x1, $y1, $x2, $y2, $x3, $y3 )
基準座標から座標 ($x1, $y1) を通過して座標 ($x3, $y3) へ達するような曲線を描画するための情報を蓄えます.座標 ($x2, $y2) は制御点とでもいえばいいのかな?
なお,このメソッドは描画情報を蓄えるのみで,描画は行いません.
$pdf->ellipse( $x, $y, $a, $b )
座標 ($x, $y) を中心とし,長軸の長さの半分を $a,短軸の長さの半分を $b とする楕円を描画するための情報を蓄えます.
なお,このメソッドは描画情報を蓄えるのみで,描画は行いません.
$pdf->arc( $x, $y, $a, $b, $alpha, $beta, $move )
座標 ($x, $y) を中心とし,長軸の長さの半分を $a,短軸の長さの半分を $b とする楕円(円)における,???$alpha???$beta???の楕円弧(円弧)描画するための情報を蓄えます.
パラメータ $move はよくわかってません.
なお,このメソッドは描画情報を蓄えるのみで,描画は行いません.
$pdf->circle( $x, $y, $r )
座標 ($x, $y) を中心,$r を半径とする円を描画するための情報を蓄えます.
なお,このメソッドは描画情報を蓄えるのみで,描画は行いません.
$pdf->rect( $x, $y, $w, $h )
左下の座標が ($x, $y) で,水平方向の長さが $w,垂直方向の長さが $h である長方形を描画するための情報を蓄えます.
なお,このメソッドは描画情報を蓄えるのみで,描画は行いません.
$pdf->rectxy( $x1, $y1, $x2, $y2 )
左下の座標が ($x1, $y1),右上の座標が ($x2, $y2) となるような長方形を描画するための情報を蓄えます.
なお,このメソッドは描画情報を蓄えるのみで,描画は行いません.
$pdf->poly( $x1, $y1, …, $x_n, $y_n )
座標 ($x1, $y1),座標 ($x2, $y2),...,座標 ($x_n, $y_n) が順に頂点となるような多角形を描画するための情報を蓄えます.
最初の座標と最後の座標が一致していない場合,後述する close メソッドで「パスを閉じて (Illustrator 的な意味で)」おくとよさげです.
なお,このメソッドは描画情報を蓄えるのみで,描画は行いません.
$pdf->close
パスを閉じます.(Illustrator 的な意味で)
$pdf->stroke
蓄えられた描画情報に基づいて,strokecolor メソッドで設定された色で線・輪郭を描画します.
$pdf->fill
蓄えられた描画情報に基づいて,fillcolor メソッドで設定された色で「塗りつぶし」を描画します.
$pdf->fillstroke
蓄えられた描画情報に基づいて,strokecolor,fillcolor それぞれのメソッドで設定された色で線・輪郭つき「塗りつぶし」を描画します.
描画関連のメソッド: 画像配置
$pdf->image( $img, $x, $y, $scale )
$pdf->image( $img, $x, $y )
画像オブジェクト $img を,座標 ($x, $y) が左下となるように,伸縮倍率 $scale(指定しない場合は 1) で配置します.
描画関連のメソッド: テキスト
$pdf->textstart
今からテキストを描画しますよ,の宣言,そんなニュアンスで解釈しています.
$pdf->textfont( $font, $size )
描画するフォントの情報としてフォントオブジェクト $font の情報を設定します.また,描画するフォントのサイズを $sizepx(?) に設定します.
$pdf->textlead( $leading )
わかってません.何が起こるのでしょうかね?
$pdf->text( $string )
文字列 $string を描画します.utf-8 にデコードされていた方がよさげのようです.
$pdf->nl
改行...ですかね?試してみたところ,行の先頭に戻っただけのような感じでした.
$pdf->textend
テキスト描画終わり,の宣言,そんなニュアンスで解釈しています.
$pdf->print( $font, $size, $x, $y, $rot, $just, $text )
Convenience wrapper for shortening the textstart..textend sequence.
PDF::API2::Lite – lite pdf creation – search.cpan.org
とあるように,上記の textstart...textend をスルーしてこれだけ覚えておいてもよさげです.
このメソッドは,文字列 $textを,フォントオブジェクト $font の情報が示すフォント,サイズ $sizepx(?),水平方向に対する回転角度 $rot° で描画します.このテキストを囲む長方形の左下の座標が ($x, $y) となります.
$text は utf-8 にデコードされていた方がよさげのようです.
パラメータ $just については使い方をよくわかってません.
なお,テキストの描画には,fillcolor メソッドで設定した色が使われます.
おわりに
細かい挙動などを把握していないため解釈を謝っている部分もあるかと思いますが,PDF::API2::Lite モジュールのメソッドのうちかじってみたものを挙げてみました.
これらのメソッドを組み合わせるだけでもいろいろ PDF でいろいろ遊べそうなことを,少しかじってみてわかった気がします.
Mediabox とか XObject とかよくわからない物体があったりしますが,理解していなくてもとりあえずは PDF として出力できてはいるようなので...まぁ追々勉強するとします.



