SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 社員募集 ...

【php】PDFlibで総ページ数表示

問題

PDFLibを利用しているが、総ページ数を各ページに書き込みたい(何ページ中何ページ目)。

ただ、総ページ数はPDF作成処理が終わってみないと分からない。

できるのか?

pdflib-page

答え

PDFLibの pdf_suspend_page関数 と pdf_resume_page関数 を使う方法がある。

ページをbeginして、内容を追加した後で、endするのではなく、susbendして途中の状態で置いといて、次のページの処理に入ることができる。全ページの処理が終わってから、suspendしていたページをresume(再開)して、総ページ数を書き込んでからendできる。

example

<?php

$p = PDF_new();

PDF_begin_document($p, "", "");

$pagecount = 0;
$font = PDF_load_font($p, "Helvetica-Bold", "winansi", "");

//PDF 1ページ目
++$pagecount;
PDF_begin_page_ext($p, 595, 842, "");
PDF_setfont($p, $font, 24.0);
PDF_set_text_pos($p, 50, 700);
PDF_show($p, "PDF PDF PDF PDF");
PDF_continue_text($p, "page count test");
PDF_set_text_pos($p, 400, 100);
PDF_show($p, "page " . $pagecount);
PDF_suspend_page($p, '');

//PDF 2ページ目
++$pagecount;
PDF_begin_page_ext($p, 595, 842, "");
PDF_setfont($p, $font, 24.0);
PDF_set_text_pos($p, 50, 700);
PDF_show($p, "PDF PDF PDF PDF");
PDF_continue_text($p, "page count test");
PDF_set_text_pos($p, 400, 100);
PDF_show($p, "page " . $pagecount);
PDF_suspend_page($p, '');

//PDF 3ページ目
++$pagecount;
PDF_begin_page_ext($p, 595, 842, "");
PDF_setfont($p, $font, 24.0);
PDF_set_text_pos($p, 50, 700);
PDF_show($p, "PDF PDF PDF PDF");
PDF_continue_text($p, "page count test");
PDF_set_text_pos($p, 400, 100);
PDF_show($p, "page " . $pagecount);
PDF_suspend_page($p, '');

//PDFの総ページ数が分かった後で

//PDF 1ページ目再開
PDF_resume_page($p, 'pagenumber=1');
PDF_show($p, " of " . $pagecount);
PDF_end_page_ext($p, "");

//PDF 2ページ目再開
PDF_resume_page($p, 'pagenumber=2');
PDF_show($p, " of " . $pagecount);
PDF_end_page_ext($p, "");

//PDF 3ページ目再開
PDF_resume_page($p, 'pagenumber=3');
PDF_show($p, " of " . $pagecount);
PDF_end_page_ext($p, "");

PDF_end_document($p, "");


//PDFの内容取得
$buf = PDF_get_buffer($p);

//PDF出力
header("Content-type: application/pdf");
header("Content-Length: " . strlen($buf));
header("Content-Disposition: inline; filename=hello.pdf");
print $buf;

//おしまい
PDF_delete($p);

関連するメモ

コメント(2)

匿名 2012年10月17日 01:12

PDFLib って有料ですよね?

yoshimura 2012年10月17日 01:30

そうですね。
ライセンスを購入しないでも、インストールして使ってみるところまではいけます。
ライセンスを購入しないと、生成したPDFにロゴが入ったりしたと思います。