日本語出力での基本の流れ
Haruの日本語でのPDFの書き出しの流れを、以下に示します。
<?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を表示させるには、以下のようにします。
header("Content-Type: application/pdf");
$haru_doc->output();
文字を出力する
続いて、実際に文字を出力します。
その前に、日本語を出力する際には文字をエンコードする必要があります。この記事内では以下の関数を通してすべて文字を出力していきます。
function encode($text){
return mb_convert_encoding($text,"SJIS-win", "UTF-8");
}
文字の出力の方法には大きく分けて2つあります。まずは、もっとも基本的な文字の出力方法で、絶対位置に文字を表示します。変数名などは、先ほどの「日本語出力での基本の流れ」で指定したものに沿っています。
$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行目");
