#!/usr/bin/perl
use PDF::API2;
# Create a blank PDF file
my $pdf = PDF::API2->new();
# Add a blank page
my $page = $pdf->page();
# Set the page size
$page->mediabox('A4');
# Add an external TTF font to the PDF
my $font = $pdf->ttfont('/usr/local/share/fonts/kouzanmouhitufont.ttf', -encode, "utf-8");
# Add some text to the page
my $str =<<EOS;
2014/04/25
我が性春に悔いなし!
俺は海賊船になる!!
EOS
my $text = $page->text();
$text->font($font, 30);
$text->translate(100, 700);
# 改行を含む文字列は、1行ずつ改行処理を入れながら出力
foreach my $line(split/\n/, $str){
$text->text($line);
#行の高さ分改行(下に改行するならマイナス値)
$text->cr(-30);
}
# Save the PDF
my $pdf_file = 'temp/test.pdf';
$pdf->saveas($pdf_file);
# ブラウザに出力
my $pdf_size = -s $pdf_file;
open (IN, $pdf_file);
my $pdf_data = join '', (<IN>);
close(IN);
print "Content-type: application/pdf\n";
print "Content-Length: $pdf_size\n\n";
print $pdf_data;
# END
一点、文章の途中で改行コードを入れていてもそのまま PDF にセットすると化けるだけなので、改行コードで文章を分割し、1行出力する度に $text->cr で改行してやらないと駄目。
まあ、きれいなレイアウトで文章を配置しようとするとけっこうややこしいコードを書かなくちゃいけないんだろうけど、とりあえず一つの文章を A4 用紙の上から表示していくだけなら簡単やねえ。