CodeZine(コードジン)

特集ページ一覧

PHP::Haruで基本的なPDFを作成する

ライセンス制限が緩く高速でPDFを作成可能なPHPライブラリ「Haru」(1)

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2013/05/28 14:00
目次

日本語出力での基本の流れ

 Haruの日本語でのPDFの書き出しの流れを、以下に示します。

日本語出力での基本の流れ(code_1.php)
<?php
//  空のページを作成
$haru_doc = new HaruDoc();

// 日本語を使うための処理
$haru_doc->useJPFonts();         // <--- (1)
$haru_doc->useJPEncodings();     // <--  (2)

//  ページを追加
$page = $haru_doc->addPage();   // <-- (3)

//  A4サイズ縦に指定
$page->setSize(HaruPage::SIZE_A4,HaruPage::PORTRAIT);  // <-- (4)

//  使用するフォントオブジェクトを作成
$font = $haru_doc->getFont('MS-PGothic','90msp-RKSJ-H');  // <-- (5)
$page->setFontAndSize($font,10);  // <-- (6)

//
// ・・・ここでデータを書き出す
//

//  指定したファイルに書き出す
$haru_doc->save("pdf/sample1_1.pdf"); // <-- (7)
?>

 (1)(2)で日本語フォントと、日本語エンコーディングのデータを内部にロードします。この処理は日本語を扱う場合に必要ですので、忘れずに実行してください。

 次に、(3)でドキュメントにページを追加します。PDFではページごとにサイズや方向を指定できます。A4のように規定のサイズの場合には(4)のようにsetSize()を使ってページサイズと方向(縦もしくは横)を指定します。A4以外にも通常使うサイズは定数として定義してありますので、詳しくはPHPのマニュアルを参照してください。また、setWidthメソッドやsetHeightメソッドなどを使って個別に指定することもできます。

 (5)では(1)や(2)でロードしたフォント情報を、ドキュメントオブジェクトから取得します。取得したフォントとフォントサイズを(6)でページに設定します。フォントを埋め込まずに指定できる日本語フォントは以下の4つです。

  • MS-Gothic(MS-ゴシック)
  • MS-PGothic(MS-ゴシック・プロポーショナルフォント)
  • MS-Mincyo(MS-明朝)
  • MS-PMincyo(MS-明朝・プロポーショナルフォント)

 フォント名に続いてカンマで区切った後に、イタリックとボールド指定が行えます。

  • MS-Gothic,Bold
  • MS-Gothic,Italic
  • MS-Gothic,BoldItalic

 また、エンコーディングは通常のSJISやUTF-8といったエンコーディングではなく、PDF特有のエンコーディングを指定する必要があります。日本語のエンコーディングは

  • 90ms-RKSJ-H(横書きでのShift_JIS)
  • 90ms-RKSJ-V(縦書きでのShift_JIS)
  • 90msp-RKSJ-H(プロポーショナルのShift_JIS)
  • EUC-H(横書きのEUC-JP)
  • EUC-V(縦書きのEUC-JP)

の5つが指定できます。

 このフォントとエンコーディングはPDFの仕様によって決められており、libharu側で実装されているもののみが指定可能です。libharuのドキュメントを読めば分かりますが、PHP側のマニュアルなどにその記載がないために何が指定できるのか悩むところでもあります。注意してください。

 最後に、PDFをファイルとして書き出す処理が、(7)のsaveメソッドです。引数にはファイル名を指定してください。また、ファイルに書き出す代わりにブラウザ上で直接PDFを表示させるには、以下のようにします。

ブラウザ上に直接PDFを表示させる
header("Content-Type: application/pdf");
$haru_doc->output();

文字を出力する

 続いて、実際に文字を出力します。

 その前に、日本語を出力する際には文字をエンコードする必要があります。この記事内では以下の関数を通してすべて文字を出力していきます。

文字コードの変換
function encode($text){
  return mb_convert_encoding($text,"SJIS-win", "UTF-8");
}

 文字の出力の方法には大きく分けて2つあります。まずは、もっとも基本的な文字の出力方法で、絶対位置に文字を表示します。変数名などは、先ほどの「日本語出力での基本の流れ」で指定したものに沿っています。

文字の出力(code_2.phpの一部)
$y = $page->getHeight();

$page->beginText();                                    // <---- (1)
$page->moveTextPos(100,$y - 200);                      // <-----(3)
//  以下の指定で1行当たりの高さを指定
$page->setTextLeading(14);                             // <---- (4)
$text1 = encode("Haruでの文字の表示方法です");
$page->showText($text1);                               // <---- (5)

//  指定した行の高さに従って表示
$text2 = encode("続いて、改行された文を出力します");
$page->showTextNextLine($text2);                       // <---- (6)
 
$page->setTextLeading(18);
$page->setFontAndSize($font,16);
$page->showTextNextLine(encode("途中で大きさを変えることもできます"));
 
$page->endText();                                     //  <----- (2)

 これを実行すると、以下のようになります。

実行結果
実行結果

 文字は必ず(1)beginTextメソッドと(2)endTextメソッドの間で出力します。また、(3)moveTextPosメソッドで文字の出力を始める(x,y)を設定し、(4)setTextLeadingメソッドで行間を指定します。これで、(5)showTextメソッドで最初の行を出力しますし、(6)showTextNextLineメソッドで改行した位置で文字を出力します。

 なお、途中で文字のサイズを変更することや、行間を変更することもできます。以下のように文字列内に改行コード(CRやLF)を含めても、PDFで出力される場合には改行はされませんので注意してください。

改行コードの注意点
$page->showText(encode("1行目\r\n2行目");

  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:ライセンス制限が緩く高速でPDFを作成可能なPHPライブラリ「Haru」

著者プロフィール

  • WINGSプロジェクト 小林 昌弘(コバヤシ マサヒロ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。個人紹介主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしど...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5