PDFlibについてのメモ v.3.02

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ファイル類)をご覧ください。


API

ここではPerl用にEXPORTされている関数のみを扱います。

一般的な関数

PDF_new
$oPDF = PDF_new();

pdflib_plのコンストラクタ。インスタンスを返す。

PDF_delete
PDF_delete($oPDF);

pdflib_plの明示的なデストラクタ。

PDF_open_file
$iRes = PDF_open_file($oPDF, $sFile);

指定されたファイル名($sFile)で新しいPDFファイルを作成する。 $sFileが'-'であれば標準出力に、空文字列であればメモリ上にPDFが作成される。 正常ならば1、エラーならば-1を返す。

PDF_close
PDF_close($oPDF);

PDFドキュメントを生成し、すべてのドキュメント関連のリソースを開放する。 メモリ上にPDFが作成されている場合には、この時点では開放されません。 (次のPDF_openまたはPDF_deleteによって削除されます)

PDF_get_buffer
$sBuffer = PDF_get_buffer($oPDF);

メモリ上のPDFデータを取得します。 これはPDFデータが作成されてからページを記述するまでの間、つまりPDF_end_page() からPDF_begin_page()の間、もしくはPDF_close()からPDF_delete()の間に呼び出さな ければなりません。

PDF_begin_page
PDF_begin_page($oPDF, $fWidth, $iHeight);

PDFファイルで新しいページを開始します。 PDF_begin_pageはPDF_close_pageと必ず組にならなければなりません。

PDF_end_page
PDF_end_page($oPDF);

PDFファイルでページを終了します。 PDF_begin_pageはPDF_close_pageと必ず組にならなければなりません。

PDF_set_parameter
PDF_set_parameter($oPDF, $sKey, $sValue);

指定されたキーの文字型のPDFlibパラメータを設定します。

PDF_get_parameter
$sValue = PDF_get_parameter($oPDF, $sKey, $fModifier);

指定されたキーの文字型のPDFlibパラメータを取得します。 場合によっては、$fModifierによって修飾します。修飾しない場合には0を設定します。

PDF_set_value
PDF_set_value($oPDF, $sKey, $fValue);

指定されたキーの数値型のPDFlibパラメータを設定します。

PDF_get_value
$fValue = PDF_get_value($oPDF, $sKey, $fModifier);

指定されたキーの数値型のPDFlibパラメータを取得します。 場合によっては、$fModifierによって修飾します。修飾しない場合には0を設定します。

テキスト関連の関数

PDF_findfont
$iFont = PDF_findfont($oPDF, $sFontName, $sEncoding, $iEmbed);

後でPDF_setfontで使うように指定された$sFontNameというフォントを用意します。 大文字/小文字はフォント名、エンコーディングともに区別されます。 $iEmbedが0であれば、一般的なフォント情報だけがPDF出力に入ります。1であれば、 メトリックス情報に加えて、フォントアウトラインファイルが利用可能でなければなりません。 そして実際のフォント定義がPDF出力に組み入れられます。 フォント/エンコーディングの組み合わせが構成設定の関係で使えなければ、PDF_RuntimeError という例外が発生します。そうでなければこの関数から返された値を他のフォント関連の 関数に使うことができます。PDF_findfontはページ記述の外側で安全に使うことができます。

PDF_setfont
PDF_setfont($oPDF, $iFont, $fFontSize);

カレントのフォントを大きさ$fFontSizeで設定します。$iFontPDF_findfontで取得したものです。 これはページ記述の間でのみ呼び出すことができます。各ページでテキストを出力する前にフォントを 設定しなければなりません。(フォントの設定はページを越えては引き継がれません)

PDF_show
PDF_show($oPDF, $sText);

カレントのフォント、フォントサイズ、位置で指定された$sTextを出力します。 フォント、フォントサイズ、位置はPDF_setfontPDF_movetoなどで設定しておく必要があります。

PDF_show_xy
PDF_show_xy($oPDF, $sText, $fX, $fY);

カレントのフォント、フォントサイズで、指定された位置に移動し、指定された$sTextを出力します。 フォント、フォントサイズ、位置はPDF_setfontなどで設定しておく必要があります。

PDF_continue_text
PDF_continue_text($oPDF, $sText);

次の行に移り、テキストを出力します。

PDF_show_boxed
$iCharNumber = PDF_show_boxed($oPDF, $sText, $fX, $fY,
  $fWidth, $fHeight, $sMode, $sFeature);

指定された$sTextを長方形に整形します。 $sModeleft, right, center, justify, fulljustifyのいずれかになります。 $sFeatureblindであれば、すべて計算が実行されますが、テキストの出力はされません。 収まるフォントの大きさを調べるために使われます。そうでなければ、$sFeatureは空文字列にします。 この関数は指定された長方形に入りきらなかった文字の数を返します。

PDF_set_text_pos
$PDF_set_text_pos($oPDF, $fX, $fY);

カレントの位置を$fX, $fYに移動します。

PDF_set_text_matrix
PDF_set_text_matrix
PDF_stringwidth
$fWidth = PDF_stringwidth($oPDF, $sText, $iFont, $fFontSize);

指定されたフォント、フォントサイズでのテキストの幅を取得します。

画像関連の関数

PDF_setdash
PDF_setdash($oPDF, $fBlack, $fWhite);

カレントの点線のパターン(DASH)を黒を$fBlack、白を $fWhiteにします。

PDF_setpolydash
PDF_setpolydash
PDF_setflat
PDF_setflat($oPDF, $fFlatness);

平面度を 0 から 100 の値に設定します。

PDF_setlinejoin
PDF_setlinejoin($oPDF, $iLineJoin);

線のつながり、角の形を指定する。 0: 鋭角、1:曲線、2: 角を削ったものの3種類が指定できる。

PDF_setlinecap
PDF_setlinecap($oPDF, $iLineCap);

線の端の形を指定する。 0: 直角、1:曲線、2:線の幅の半分だけ伸びた直角の3種類が指定できる。

PDF_setmiterlimit
PDF_setmiterlimit($oPDF, $fMiter);

miterlimitを指定された値に設定します。 $fMiterは1以上でなければなりません。 miterlimitは、各ページの始めにデフォルト値である10に設定されます。

PDF_setlinewidth
PDF_setlinewidth($oPDF, $fWidth);

カレントの線の幅をユーザ調整による単位で$fWidthにする。 線の幅は、各ページの始めにデフォルト値である1に設定されます。

PDF_save
PDF_save($oPDF);

カレントのグラフィックの状態を保存します。

PDF_restore
PDF_restore($oPDF);

最後に保存されたグラフィックの状態に戻します。

PDF_translate
PDF_translate($oPDF, $fTx, $fTy);

座標システムを($fTx, $fTy)に変換します。

PDF_scale
PDF_scale($oPDF, $fSx, $fSy);

座標システムを<$fSx>, $fSyでスケールを変換します。

PDF_rotate
PDF_rotate($oPDF, $fPhi);

<$fPhi>度、座標を回転させます。

PDF_skew
PDF_skew($oPDF, $fAlpha, $fBeta);

$fAlphaから $fBeta度、スキューします。

PDF_concat
PDF_concat($oPDF, $fA, $fB, $fC, $fD, $fE );
PDF_moveto
PDF_moveto($oPDF, $fX, $fY);

カレントの位置を($fX, $fY)に移動します。

PDF_lineto
PDF_lineto($oPDF, $fX, $fY);

カレントのパスから($fX, $fY)までの直線を加えます。

PDF_curveto
PDF_curveto($oPDF, $fX1, $fY1, $fX2, $fY2, $fX3, $fY3);

カレントの位置からを通る ($fX3, $fY3)への、($fX1, $fY1) を ($fX2, $fY2) 制御点としたベジエ曲線を追加します。

PDF_circle
PDF_circle($oPDF, $fX, $fY, $fR);

($fX, $fY)を中心とし、$fRを半径とする円を追加します。

PDF_arc
PDF_arc($oPDF, $fX, $fY, $fR, $fStart, $fEnd);

($fX, $fY)を中心とし、$fRを半径とする円の$fStart度から $fEnd度までの 円弧を追加します。

PDF_rect
PDF_rect($oPDF, $fX, $fY, $fWidth, $fHeight);

左下隅を$fX, $fYとする幅 $fWidth、高さ $fHeightの長方形を追加する。

PDF_closepath
PDF_closepath($oPDF);

カレントのパスを閉じます。つまりカレントの位置からパスの開始点まで直線が追加されます。

PDF_stroke
PDF_stroke($oPDF);

カレントのパスに沿って 線を描画します。 カレントのパスは描画する全ての線を集めたものです。 この関数を使用しない場合、線は描画されません。

PDF_closepath_stroke
PDF_closepath_stroke($oPDF);

PDF_closepath() および PDF_stroke() の組み合わせです。

PDF_fill
PDF_fill($oPDF);

カレントのパスの内部を カレントの塗りつぶし色で塗りつぶします。

PDF_fill_stroke
PDF_fill_stroke($oPDF);

カレントのパスの内部をカレントの塗りつぶし色で塗りつぶし、 カレントのパスを描画します。

PDF_closepath_fill_stroke
PDF_closepath_fill_stroke($oPDF);

カレントのパスの内部を閉じ、カレントの塗りつぶし色で塗りつぶし、 カレントのパスを描画します。

PDF_endpath
PDF_endpath($oPDF);

カレントのパスを 終了しますが、そのパスを閉じません。

PDF_clip($oPDF);
PDF_clip($oPDF);

絵全体を カレントのパスに切り取ります。

カラー関連の関数

PDF_setgray_fill
PDF_setgray_fill($oPDF, $fGray);

グレー値 $fGrayをカレントのパス塗りつぶし用に設定します。

PDF_setgray_stroke
PDF_setgray_stroke($oPDF, $fGray);

カレントの描画色を 指定されたグレー値に設定します。

PDF_setgray
PDF_setgray($oPDF, $fGray);

カレントの描画および塗りつぶし色を指定されたグレー値に設定します。

PDF_setrgbcolor_fill
PDF_setrgbcolor_fill($oPDF, $fRed, $fGreen, $fBlue);

塗りつぶし色を RGB カラー値に設定します。

PDF_setrgbcolor_stroke
PDF_setrgbcolor_stroke($oPDF, $fRed, $fGreen, $fBlue);

カレントの描画色を 指定された RGB カラー値に設定します。

PDF_setrgbcolor
PDF_setrgbcolor($oPDF, $fRed, $fGreen, $fBlue );

カレントの描画および塗りつぶし色を指定された RGB カラー値に設定します。

イメージ関連の関数

PDF_place_image
PDF_place_image
PDF_open_image
$iImage = PDF_open_image($oPDF, $sType, $sSource, $sData, $iLength, $iWidth, $iHeight, $iComponents, $iBpc, $sParams);

$sSourceという種類の$sDataで指定された場所の画像をオープンし、PDF画像IDを返します。 $sSourceにはfilerefurlmemoryがそれぞれ指定できます。 $sDatafilerefのときにはファイル名、urlのときにはイメージのURL、memoryの場合には イメージデータそのものになります。

PDF_open_image_file
$iImage = PDF_open_image_file($oPDF, $sType, $sFileName, $sStringParam, $iIntParam );

$sTypeで指定された形式の$sFileNmaeというファイルの画像をオープンし、PDF画像IDを返します。

PDF_close_image
PDF_close_image($oPDF, $iImage);

PDF_open_xxxx でオープンされた画像を閉じます。

PDF_open_CCITT
$iImage = PDF_open_CCITT($oPDF, $sFileName, $iWidth, $iHeight, $iBitReverse,
  $iK, $iBlack1st);

CCITT G3またはG4圧縮されたビットマップデータをオープンし、、PDF画像IDを返します。

ハイパーテキスト関連の関数

PDF_add_bookmark
$iBookmarkID = PDF_add_bookmark($oPDF, $sText, $iParent, $iOpen);

指定されたテキストでカレントのページを示すブックマークを作成します。

PDF_set_info
PDF_set_info($oPDF, $sKey, $sValue);

ドキュメント情報フィールド$sKey$sValueを設定する。

PDF_attach_file
PDF_attach_file($oPDF, $fLlX, $fLlY, $fUrX, $fUrY, $sFileName, $sDescription, $sAuthor, $sMimeType, $sIcon);

添付ファイルの印を指定された長方形(左下から右上)に作成します。 $sIconにはgraphpushpinpapercliptagが指定できます。

PDF_add_note
PDF_add_note($oPDF, $fLlX, $fLlY, $fUrX, $fUrY, $sContents, $sTitle, $sIcon, $iOpen);

注記の印を指定された長方形(左下から右上)に作成します。 $sIconにはcommentnewparagraphinsertkeynotehelpparagraphが指定できます。

PDF_add_pdflink
PDF_add_pdflink($oPDF, $fLlX, $fLlY, $fUrX, $fUrY, $sFileName, $iPage, $sDest);

PDFファイルへのリンクを指定された長方形(左下から右上)に作成します。 $sDestにはretainfitpagefitwidthfitheightfitboxが指定できます。

PDF_add_launchlink
PDF_add_launchlink($oPDF, $fLlX, $fLlY, $fUrX, $fUrY, $sFileName);

起動の印を指定された長方形(左下から右上)に作成します。 $sFileNameはそのリンクをクリックときに起動されるファイルです。

PDF_add_locallink
PDF_add_locallink($oPDF, $fLlX, $fLlY, $fUrX, $fUrY, $iPage, $sDest);

現在のPDFファイルへのリンクを指定された長方形(左下から右上)に作成します。 $sDestにはretainfitpagefitwidthfitheightfitboxが指定できます。

PDF_add_weblink
PDF_add_weblink($oPDF, $fLlX, $fLlY, $fUrX, $fUrY, $sUrl);

Webリンクを指定された長方形(左下から右上)に作成します。 $sUrlはそのリンクをクリックときのリンク先です。

PDF_set_border_style
PDF_set_border_style($oPDF, $sStyle, $fWidth);

リンクおよび注記を囲む箱のスタイルと幅を設定します。パラメータ styleは 'solid'または'dashed'を指定するこ とができます。

PDF_set_border_color
PDF_set_border_color($oPDF, $fRed, $fGreen, $fBlue);

リンクおよび注記の周囲の箱の色を設定します。色の3種類の要素には、0.0から1.0の間の 値を指定します。

PDF_set_border_dash
PDF_set_border_dash($oPDF, $fBlack, $fWhite);

リンクおよび注記の周囲の箱の破線において黒と白の部分の長さを設定します。


日本語テキストの扱い

Acrobatの標準の日本語用フォントとして以下の2種類があらかじめ定義されています。

さらにこのためのCMap(エンコーディング)には以下のものがあります。

※ 説明はPortable Document Format Reference Manual Version 1.3 March 11, 1999 から抜粋

末尾-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);

ホーム Perlの小技

ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。