【php】PDFlibで総ページ数表示
問題
PDFLibを利用しているが、総ページ数を各ページに書き込みたい(何ページ中何ページ目)。
ただ、総ページ数はPDF作成処理が終わってみないと分からない。
できるのか?

答え
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);
PDFLib って有料ですよね?
そうですね。
ライセンスを購入しないでも、インストールして使ってみるところまではいけます。
ライセンスを購入しないと、生成したPDFにロゴが入ったりしたと思います。