PDFファイルを作成する - PDF::API2で帳票作成
PDF::API2で、PDFファイルを作成するには次のようにします。
PDFの空の情報を作成するには、newメソッドを使用します。
空のページを追加するには、pageメソッドを使います。
最後にsaveasメソッドを使って、ファイルを保存します。
この手順を行うことで、空の1ページが存在するPDFファイルを作成できます。
use strict; use warnings; use PDF::API2; # PDFの空の情報を作成 my $pdf = PDF::API2->new; # 空のページを追加 my $page = $pdf->page; # PDFをファイルに保存 my $pdf_file = 'empty.pdf'; $pdf->saveas($pdf_file);
空のPDFファイルが作成できれば、成功しています。
既存のPDFファイルを開く
PDF::API2で既存のPDFファイルを開くには、openメソッドを使用します。
# 既存のPDFファイルを開く my $pdf = PDF::API2->open('some.pdf');
新しいページを追加する
PDF::API2で新しいページを追加するにはpageメソッドを使用します。pageで作成されたページは、PDFドキュメントの末尾に追加されます。
# PDFドキュメントの末尾にページを追加 my $page = $pdf->page;
引数を指定すると、指定のページに挿入できます。既存のページは、後ろにずれます。
# PDFドキュメントの指定のページにページを追加 my $page = $pdf->page(5);
既存のページを取得する
PDF::API2で既に存在しているページを取得するには、openpageメソッドで、ページ番号を指定します。ページ番号は、1から始まります。0からの始まりではないことに注意してください。
# すでに存在しているページを取得 my $page = $pdf->openpage($page_number);
ページ数を取得する
PDF::API2で、存在しているページ数を取得するには、pagesメソッドを使用します。
# PDFドキュメントのページ数を取得 my $pages_count = $pdf->pages;
用紙サイズを設定する
PDF::API2でページの用紙サイズを設定するには、mediaboxメソッドを使用します。
# 名前で指定 $pdf->mediabox($name); # 幅と高さで指定 $pdf->mediabox($width, $height)
指定できる名前はPDFで定義されている値です。以下に指定できる例を挙げておきます。これは、グローバルな設定であり、新規のページを作成した場合に、ページに設定が受け継がれます。
各ページに用紙サイズを指定するには、ページオブジェクトのmediaboxメソッドを使用します。
# 名前で指定 $page->mediabox($name); # 幅と高さで指定 $page->mediabox($width, $height)
- Letter
- A3
- A4
- B4
- A5
- B5
- A6
- B6
PDF座標系についての簡単な解説のページのリンクを張っておきます。
幅と高さは、PDF単位という値で指定する必要があることに注意します。1単位は、1/72のインチ(約0.35mm)です。
典型的なPDFドキュメントはページの幅が612単位、高さが792単位です。インチのサイズは、8.5"×11"です。幅と高さを72で割ることによって得られます。
PDF文書が画面に与えられるとき、ピクセルなどの物理的な値が通常必要です。論理的にから物理的な単位まで変換するために、解像度は提供されなければなりません。解像度は、物理的な値に論理的な変換とき、使うインチにつき点(ピクセル)の値です。上記の例では、解像度として150を使用した場合、ピクセル単位のページサイズは1275×1650になります。これは8.5×11インチに150を乗算することによって得られます。
(参考)PDF座標系
PDF::API2で、用紙サイズを指定するサンプルです。
use PDF::API2; # A4サイズで指定 { my $pdf = PDF::API2->new(); $pdf->mediabox('A4'); my $mediabox = $pdf->mediabox; my $page = $pdf->page; my $pdf_file = 'size_a4.pdf'; $pdf->saveas($pdf_file); } # B5サイズで指定 { my $pdf = PDF::API2->new(); $pdf->mediabox('B5'); my $page = $pdf->page; my $pdf_file = 'size_b5.pdf'; $pdf->saveas($pdf_file); } # PDF単位 幅595,高さ842で指定 { my $pdf = PDF::API2->new(); $pdf->mediabox(595, 842); my $page = $pdf->page; my $pdf_file = 'size_595_842.pdf'; $pdf->saveas($pdf_file); }
出力結果 A4サイズ、 出力結果 B5サイズ、 出力結果 595×842サイズ
用紙サイズを取得する
用紙サイズを取得するには、引数を与えないで、ページオブジェクトのmediaboxメソッドを使用します。
my @page_size_infos = $page->mediabox;
実際のページの用紙サイズの情報を取得するには、PDFオブジェクトではなく、ページオブジェクトのmediaboxメソッドを呼び出す必要があることに注意してください。
用紙サイズの情報は、4つのPDF単位で取得されることに注意してください。
(左下からのマージンX, 左下からのマージンY, 右上の座標X, 右上の座標Y)
たとえば、次のような値で、返ってきます。
(0, 0, 612, 792)
一般的には、左下からのマージンXが0、 左下からのマージンYが0で返ってきますので、右上の座標Xが幅、右上の座標Yが、高さと考えてよいでしょう。
複数のPDFファイルを結合する
複数のPDFファイルを結合する手順を紹介します。新しいPDF::API2オブジェクトを作成します。既存のPDFファイルを開きます。
import_pageメソッドを使って、既存のPDFファイルを新しいPDFに挿入します。
最後に、新しいPDFを保存して終了です。
my $pdf = PDF::API2->new(); my $old = PDF::API2->open('our/old.pdf'); # Add page 2 from the old PDF as page 1 of the new PDF $pdf->import_page($old, 2); $pdf->saveas('our/new.pdf');