http://search.cpan.org/dist/PDF-API2/
PDFファイルを生成する必要があったので、cpanを眺めていたら、PDF::API2というモジュールがありました。
これまでPDFファイルの自動生成というと、pdfjやpdflibの名前を聞いたことがありますが、PDF::API2でも十分に使えるように思えます。
今回は、予めprimoPDFで作成(印刷?)した帳票上(というより背景として?)に、文字や写真を追加してみました。
#!/usr/local/bin/perl use strict; use warnings; use encoding qw/cp932/; #cp932以外では機種依存文字がpdfに出力されない? use PDF::API2; use PDF::API2::Resource::CIDFont::CJKFont; main(); sub main { my $pdf = PDF::API2->open("org.pdf"); #今回はA4横 my $page = $pdf->openpage(); #PDF::API2::Resource::CIDFont::CJKFont参照 my $fnt = $pdf->cjkfont('KozMin'); my $out_text = join("\n", "PDF::API2でpdf自動生成テスト。", "cp932なら機種依存文字:���も出力。", '$txt->textlabel()では、改行コードが空白に'); #### テキスト1行(textlabel)?の表示 PDF::API2::Content参照 my $txt_label = $page->text; $txt_label->textlabel(400,700, #API表示位置=用紙位置mm*2.83? $fnt,10, $out_text, #改行は空白に変換? -rotate => 90,#A4横の場合,なぜか縦書になる為 -align => 'right'); #何となく右寄せ #### 長文(section)?の表示 PDF::API2::Content参照 my $txt_sec = $page->text; $txt_sec->font($fnt,20); $txt_sec->transform(-translate => [300,300], -rotate => 90); #A4横の場合,なぜか縦書になる為 $txt_sec->lead(20); #行間? $txt_sec->section($out_text, 100,100); #width*height #### 画像(jpeg)?の表示 PDF::API2::Content参照 my $gfx = $page->gfx; $gfx->transform(-translate => [300,100], -rotate => 90); #A4横の場合,なぜか縦書になる為 my $img = $pdf->image_jpeg("sample.jpg"); $gfx->image($img,0,0,50,100); $pdf->saveas("new.pdf"); }
さすがにTemplate::Toolkit等とは使用方法は異なりますが、機種依存文字も出力されるので、PDF::API2っていいかも