ようこそゲストさん

Magical Diary, beta version

[Perl] PDFJの使い方

2007/07/19 0:44 HIRATA Yasuyuki

Perl用のフリーな日本語PDF生成モジュールとしては PDFJ がある。 組版ルールは JIS X 4051 (日本語文書の組版方法) に準拠しているので、日本語を取り扱うには非常に便利である。

以下、このモジュールを使用してPDFファイルを生成する方法について簡単に記載する。このプログラムでは省略しているが、段落を指定の高さごとに分割してページ処理をすることも可能である。なお、このまま利用するためには、ソースのエンコードを utf-8 とすること。

  1. 文書オブジェクトの生成。
    # プラグマとかモジュールとか
    use utf8;
    use strict;
    use warnings;
    use PDFJ qw[UTF8];
    
    # 文書オブジェクトの生成
    # PDFのバージョンは迷ったら1.3を指定するのが無難。(Acrobat 4以上に対応)
    # 幅と高さはポイントで指定する。
    my $paperWidth = 595;
    my $paperHeight = 842;
    my $doc = new PDFJ::Doc(1.3, $paperWidth, $paperHeight);
    
  2. ページオブジェクトの生成。
    # ページオブジェクトの生成; 文書の最後にページを追加する。
    my $page = $doc->new_page();
    
  3. フォントとテキストスタイルの定義。ここでは、和文フォントを Ryumin-Light (エンコードはUniJIS-UCS2-HW-H)、英文フォントを Times-Roman としている。
    # フォント
    my $font = $doc->new_font("Ryumin-Light", "UniJIS-UCS2-HW-H", "Times-Roman", undef);
    my $fontSize = 16;
    my $textStyle = TStyle(font => $font, fontsize => $fontSize);
    
  4. 単純にテキストを配置する。(折り返し無し)
    # テキストオブジェクト
    my $text = Text("はにゃーん", $textStyle);
    
    # (100, 100) にテキストを配置。
    $text->show($page, 100, 100);
    
  5. 段落を作成 (自動的に折り返される) して、配置する。
    # 今度は段落を作成する。
    my $haahaa = Text("ハァハァ"x100, $textStyle);
    
    # $fontSize*20 ポイント (20文字分) で折り返し。
    # 実際には 20.01 くらいにしておくと最後の1文字が行末に来る場合、
    # 余計な空行が入らなくてよさげ。
    my $pageStyle = PStyle(size => $fontSize*20, linefeed => $fontSize + 10, align => "b");
    my $para = Paragraph($haahaa, $pageStyle);
    $para->show($page, 100, 800);
    
  6. ファイルに出力。
    # pdfj.pdf に書き出し。stdoutへ出力することも可能。
    $doc->print("pdfj.pdf");
    

上記プログラムで出力されたPDFファイル


#  非公開コメント   

  • TB-URL(確認後に公開)  http://diary.asuka.net/010/tb/
© 2007 HIRATA Yasuyuki <yasu@asuka.net>, all rights reserved