by Hippo2000(2000/12/22)
PDFを作るためのライブラリ PDFlibについてのメモなのです。
いつもの形式ですがこれは、"Reference Manual PDFlib - A library fo rgenerating PDF on the fly Version 3.02"を元にPerlで利用することを念頭において作成しました。
PDFlibを利用できるのはPHPだけじゃないってことね(^^)CPANにはなく http://www.pdflib.comで配布されていること、ライセンスがPerlとは違うことに十分に注意してください。
#ついでにインストールがちょっと面倒なこともなお内容等が間違っていたら修正します。ご連絡ください。
PDFlib - PDFを作成するためのライブラリ
#!/usr/bin/perl
use strict;
use pdflib_pl 3.02;
#PDFの作成、ファイルのオープン
my $oPdf = PDF_new();
die "Couldn't open PDF file" if (PDF_open_file($oPdf, "ex1.pdf") == -1);
#ファイルの情報設定
PDF_set_info($oPdf, "Creator", "ex1.pl");
PDF_set_info($oPdf, "Author", "Hippo2000");
PDF_set_info($oPdf, "Title", "PDF Create with PDFlib");
#イメージファイルのオープン
my $sImgFile = "img.jpg";
my $oImg = PDF_open_image_file($oPdf, "jpeg", $sImgFile, "", 0);
die "Couldn't open image '$sImgFile'" if ($oImg == -1);
#ページの開始
PDF_begin_page($oPdf, 595, 842);
#フォントを検索し、設定
my $font = PDF_findfont($oPdf, "HeiseiKakuGo-W5", "EUC-H", 0);
PDF_setfont($oPdf, $font, 18.0);
#テキスト出力、イメージの添付
PDF_set_text_pos($oPdf, 50, 700);
PDF_show($oPdf, "河馬屋です、こんにち");
PDF_continue_text($oPdf, "(says Perl)");
PDF_place_image($oPdf, $oImg, 0, 0, 1);
PDF_end_page($oPdf);
PDF_close($oPdf);
PDF_delete($oPdf);
PDFLibとはThomas Merz氏が作成したPDFを作成するためのライブラリです。 C、C++のほかJava、Perl、Python、Tclからも利用するためのインターフェースが 提供されています。ActiveX/COMでも提供されているのでVBやDelphiからも利用できます。 PHPからもPDFLibをつけてビルドすることにより利用することができます。 一点注意しなければならないのは、このライブラリはAlladin Free Public Licenseである ことです。商用の場合にはCommercial Licenseが必要ですし、ActiveX版は例え個人ユースで あってもCommercial Licenseとなります。 詳しくはPDFlibのサイトをご覧になってください。 ソースやマニュアル、ライセンスの情報はすべて、ここから取得することができます。
PDFlibのホームページ: http://www.pdflib.com
インストールについての説明はディストリビューションに含まれる、readme.txt、docディレクトリ配下のファイル(readme_*.txt、PDFファイル類)をご覧ください。
ここではPerl用にEXPORTされている関数のみを扱います。
pdflib_plのコンストラクタ。インスタンスを返す。
pdflib_plの明示的なデストラクタ。
指定されたファイル名($sFile)で新しいPDFファイルを作成する。 $sFileが'-'であれば標準出力に、空文字列であればメモリ上にPDFが作成される。 正常ならば1、エラーならば-1を返す。
PDFドキュメントを生成し、すべてのドキュメント関連のリソースを開放する。 メモリ上にPDFが作成されている場合には、この時点では開放されません。 (次のPDF_openまたはPDF_deleteによって削除されます)
メモリ上のPDFデータを取得します。 これはPDFデータが作成されてからページを記述するまでの間、つまりPDF_end_page() からPDF_begin_page()の間、もしくはPDF_close()からPDF_delete()の間に呼び出さな ければなりません。
PDFファイルで新しいページを開始します。 PDF_begin_pageはPDF_close_pageと必ず組にならなければなりません。
PDFファイルでページを終了します。 PDF_begin_pageはPDF_close_pageと必ず組にならなければなりません。
指定されたキーの文字型のPDFlibパラメータを設定します。
指定されたキーの文字型のPDFlibパラメータを取得します。 場合によっては、$fModifierによって修飾します。修飾しない場合には0を設定します。
指定されたキーの数値型のPDFlibパラメータを設定します。
指定されたキーの数値型のPDFlibパラメータを取得します。 場合によっては、$fModifierによって修飾します。修飾しない場合には0を設定します。
後でPDF_setfontで使うように指定された$sFontNameというフォントを用意します。 大文字/小文字はフォント名、エンコーディングともに区別されます。 $iEmbedが0であれば、一般的なフォント情報だけがPDF出力に入ります。1であれば、 メトリックス情報に加えて、フォントアウトラインファイルが利用可能でなければなりません。 そして実際のフォント定義がPDF出力に組み入れられます。 フォント/エンコーディングの組み合わせが構成設定の関係で使えなければ、PDF_RuntimeError という例外が発生します。そうでなければこの関数から返された値を他のフォント関連の 関数に使うことができます。PDF_findfontはページ記述の外側で安全に使うことができます。
カレントのフォントを大きさ$fFontSizeで設定します。$iFontはPDF_findfontで取得したものです。 これはページ記述の間でのみ呼び出すことができます。各ページでテキストを出力する前にフォントを 設定しなければなりません。(フォントの設定はページを越えては引き継がれません)
カレントのフォント、フォントサイズ、位置で指定された$sTextを出力します。 フォント、フォントサイズ、位置はPDF_setfont、PDF_movetoなどで設定しておく必要があります。
カレントのフォント、フォントサイズで、指定された位置に移動し、指定された$sTextを出力します。 フォント、フォントサイズ、位置はPDF_setfontなどで設定しておく必要があります。
次の行に移り、テキストを出力します。
| $iCharNumber = PDF_show_boxed($oPDF, $sText, $fX, $fY, | |
| $fWidth, $fHeight, $sMode, $sFeature); |
指定された$sTextを長方形に整形します。 $sModeはleft, right, center, justify, fulljustifyのいずれかになります。 $sFeatureがblindであれば、すべて計算が実行されますが、テキストの出力はされません。 収まるフォントの大きさを調べるために使われます。そうでなければ、$sFeatureは空文字列にします。 この関数は指定された長方形に入りきらなかった文字の数を返します。
カレントの位置を$fX, $fYに移動します。
指定されたフォント、フォントサイズでのテキストの幅を取得します。
カレントの点線のパターン(DASH)を黒を$fBlack、白を $fWhiteにします。
平面度を 0 から 100 の値に設定します。
線のつながり、角の形を指定する。 0: 鋭角、1:曲線、2: 角を削ったものの3種類が指定できる。
線の端の形を指定する。 0: 直角、1:曲線、2:線の幅の半分だけ伸びた直角の3種類が指定できる。
miterlimitを指定された値に設定します。 $fMiterは1以上でなければなりません。 miterlimitは、各ページの始めにデフォルト値である10に設定されます。
カレントの線の幅をユーザ調整による単位で$fWidthにする。 線の幅は、各ページの始めにデフォルト値である1に設定されます。
カレントのグラフィックの状態を保存します。
最後に保存されたグラフィックの状態に戻します。
座標システムを($fTx, $fTy)に変換します。
座標システムを<$fSx>, $fSyでスケールを変換します。
<$fPhi>度、座標を回転させます。
$fAlphaから $fBeta度、スキューします。
カレントの位置を($fX, $fY)に移動します。
カレントのパスから($fX, $fY)までの直線を加えます。
カレントの位置からを通る ($fX3, $fY3)への、($fX1, $fY1) を ($fX2, $fY2) 制御点としたベジエ曲線を追加します。
($fX, $fY)を中心とし、$fRを半径とする円を追加します。
($fX, $fY)を中心とし、$fRを半径とする円の$fStart度から $fEnd度までの 円弧を追加します。
左下隅を$fX, $fYとする幅 $fWidth、高さ $fHeightの長方形を追加する。
カレントのパスを閉じます。つまりカレントの位置からパスの開始点まで直線が追加されます。
カレントのパスに沿って 線を描画します。 カレントのパスは描画する全ての線を集めたものです。 この関数を使用しない場合、線は描画されません。
PDF_closepath()
および PDF_stroke()
の組み合わせです。
カレントのパスの内部を カレントの塗りつぶし色で塗りつぶします。
カレントのパスの内部をカレントの塗りつぶし色で塗りつぶし、 カレントのパスを描画します。
カレントのパスの内部を閉じ、カレントの塗りつぶし色で塗りつぶし、 カレントのパスを描画します。
カレントのパスを 終了しますが、そのパスを閉じません。
絵全体を カレントのパスに切り取ります。
グレー値 $fGrayをカレントのパス塗りつぶし用に設定します。
カレントの描画色を 指定されたグレー値に設定します。
カレントの描画および塗りつぶし色を指定されたグレー値に設定します。
塗りつぶし色を RGB カラー値に設定します。
カレントの描画色を 指定された RGB カラー値に設定します。
カレントの描画および塗りつぶし色を指定された RGB カラー値に設定します。
$sSourceという種類の$sDataで指定された場所の画像をオープンし、PDF画像IDを返します。 $sSourceにはfileref、url、memoryがそれぞれ指定できます。 $sDataはfilerefのときにはファイル名、urlのときにはイメージのURL、memoryの場合には イメージデータそのものになります。
$sTypeで指定された形式の$sFileNmaeというファイルの画像をオープンし、PDF画像IDを返します。
PDF_open_xxxx でオープンされた画像を閉じます。
| $iImage = PDF_open_CCITT($oPDF, $sFileName, $iWidth, $iHeight, $iBitReverse, | |
| $iK, $iBlack1st); |
CCITT G3またはG4圧縮されたビットマップデータをオープンし、、PDF画像IDを返します。
指定されたテキストでカレントのページを示すブックマークを作成します。
ドキュメント情報フィールド$sKeyに$sValueを設定する。
添付ファイルの印を指定された長方形(左下から右上)に作成します。 $sIconにはgraph、pushpin、paperclip、tagが指定できます。
注記の印を指定された長方形(左下から右上)に作成します。 $sIconにはcomment、newparagraph、insert、key、note、help、paragraphが指定できます。
PDFファイルへのリンクを指定された長方形(左下から右上)に作成します。 $sDestにはretain、fitpage、fitwidth、fitheight、fitboxが指定できます。
起動の印を指定された長方形(左下から右上)に作成します。 $sFileNameはそのリンクをクリックときに起動されるファイルです。
現在のPDFファイルへのリンクを指定された長方形(左下から右上)に作成します。 $sDestにはretain、fitpage、fitwidth、fitheight、fitboxが指定できます。
Webリンクを指定された長方形(左下から右上)に作成します。 $sUrlはそのリンクをクリックときのリンク先です。
リンクおよび注記を囲む箱のスタイルと幅を設定します。パラメータ styleは 'solid'または'dashed'を指定するこ とができます。
リンクおよび注記の周囲の箱の色を設定します。色の3種類の要素には、0.0から1.0の間の 値を指定します。
リンクおよび注記の周囲の箱の破線において黒と白の部分の長さを設定します。
Acrobatの標準の日本語用フォントとして以下の2種類があらかじめ定義されています。
さらにこのためのCMap(エンコーディング)には以下のものがあります。
※ 説明はPortable Document Format Reference Manual Version 1.3 March 11, 1999 から抜粋
Unicode(UCS-2) encoding for the Adobe-Japan1
character collection 末尾-Hは横書き、-Vは縦書きを意味します。
ex.
# HeiseiKakuGo-W5をEUCの横書きのフォント。
my $fontH = PDF_findfont($oPdf, "HeiseiKakuGo-W5", "EUC-H", 0);
#HeiseiMin-W3をShiftJISの縦書きのフォント。
my $fontV = PDF_findfont($oPdf, "HeiseiMin-W3", "90ms-RKSJ-V", 0);
ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。