書籍転載:PHPライブラリ&サンプル実践活用[厳選100]
PDFファイルを読み込む/生成する(Zend_Pdf)
PDFファイルの読み込みや生成が容易にできるライブラリ「Zend¥Pdf」の基本的な使い方を説明する。書籍転載の10本目(書籍内の番号は「32」)。
書籍転載について
ご注意
本記事は、書籍の内容を改変することなく、そのまま転載したものです。このため用字用語の統一ルールなどはBuild Insiderのそれとは一致しません。あらかじめご了承ください。
Zend¥PdfはPDFファイルの読み込みや生成が容易にできるライブラリです。日本語を含むマルチバイト文字を含むPDFファイルの出力や、複数のPDFファイルのマージや1ページ単位で編集など、高度な機能を利用することができます。
- 名称: Zend¥Pdf
- URL: https://github.com/zendframework/ZendPdf
- インストール方法: Composer を利用
- ファイル: ZendPdf/PdfDocument.php、ZendPdf/Resource/Extractor.php、ZendPdf/Font.php、ZendPdf/Page.php
インストール
Zend¥Pdfのインストールは、Composer経由が可能です。リスト32-1のように、composer.jsonを記述し、インストールコマンドでダウンロードします。
"require": {
"zendframework/zendpdf": "dev-master"
}
|
PDFを読み込む
Zend¥Pdfを利用すると、手軽にPDFを読み書きすることができます。リスト32-2はPDFファイルを読み込んで、ブラウザに表示する例です(1)。PDFファイルを指定して、ZendPdf¥PdfDocumentクラスのインスタンスを生成します(2)。読み込んだPDFファイルの内容には、render()メソッドでアクセスできます。ヘッダを指定して、echoメソッドでPDFファイルの内容を出力するとブラウザでPDFを表示することができます(3)。
PDFをマージする
// 1ライブラリの読み込み
require_once 'Zend/Loader/StandardAutoloader.php';
$loader = new Zend\Loader\StandardAutoloader(array('autoregister_zf' => true));
$loader->registerNamespace('ZendPdf', "ZendPdf");
$loader->register();
use ZendPdf\PdfDocument;
// 2pdfを読み込む
$pdf = PdfDocument::load('sample.pdf');
// 3ブラウザに表示
header ('Content-Type:', 'application/pdf');
header ('Content-Disposition:', 'inline;');
echo $pdf->render();
|
リスト32-3は、複数のPDFファイルをマージして1つのPDFとして扱う例です。前項と同様にPDFを読み込む際には、ZendPdf¥PdfDocumentクラスを利用します。
use ZendPdf\PdfDocument;
// マージするPDFファイル
$pdfArray = array('test.pdf', 'sample.pdf');
// マージ用のPDFオブジェクト
$mergePdf = new ZendPdf\PdfDocument();
foreach($pdfArray as $file){
// 1pdfを読む
$pdf = PdfDocument::load($file);
// 2PDFの内容を取得
$extractor = new ZendPdf\Resource\Extractor();
// 3各ページを取得
foreach($pdf->pages as $page){
// 4ページの内容をコピー
$pdfExtract = $extractor->clonePage($page);
// 5マージ用のPDFにページ内容を追加
$mergePdf->pages[] = $pdfExtract;
}
}
|
マージしたいPDFファイルを1ファイルずつ読み込みます(1)。PDFファイル1ページごとの内容を管理するクラスZendPdf¥Resource¥Extractorのインスタンスを生成します(2)。
PDFファイルを1ページずつ内容を取得して、ZendPdf¥Resource¥ExtractorクラスのclonePageメソッドで内容をコピーします(3)。コピーしたPDF1ページの内容を(4)、ZendPdf¥PdfDocumentのオブジェクトに順番に格納して1つのPDFにします(5)。結果的に複数のPDFファイルをマージしたPDFが生成されます。
PDFを作成/保存する
リスト32-4は、PDFを新規で作成し、ファイルとして保存する例です。
use ZendPdf\PdfDocument;
use ZendPdf\Font;
// 1PDFドキュメントを生成
$pdf = new ZendPdf\PdfDocument();
// 2A$サイズでPDFのページ生成
$pdfPage = new ZendPdf\Page(ZendPdf\Page::SIZE_A4);
// 3日本語のフォントを指定
$font = ZendPdf\Font::fontWithPath('HanaMinA.ttf');
$pdfPage->setFont($font , 24 ); // フォントと文字のサイズを指定
$pdfPage->drawText('PDF出力サンプル', 100, 500, 'UTF-8');// 出力する文字と位置、文字コードの指定
// 4生成したページをPDFドキュメントに追加
$pdf->pages[] = $pdfPage;
// 5ファイルとして保存、ブラウザに出力
$pdf->save('sample.pdf');
header ('Content-Type:', 'application/pdf');
header ('Content-Disposition:', 'inline;');
echo $pdf->render();
|
PDFを保存するためのZendPdf¥PdfDocumentクラスのインスタンスを生成します(1)。newPageメソッドでサイズを指定してPDF1ページのデータを生成します(2)。指定できるサイズのパラメータにはつ表32-1のものがあります。
なし | なし |
---|---|
ZendPdf\Page::SIZE_A4 | A4縦(595pt×842pt) |
ZendPdf\Page::SIZE_A4_LANDSCAPE | A4横(842pt×595pt) |
ZendPdf\Page::SIZE_LETTER | USレターサイズ縦(612pt×792pt) |
ZendPdf\Page::SIZE_LETTER_LANDSCAPE | USレターサイズ横(792×612pt) |
PDFに内容を記述するフォントを指定します(3)。デフォルトのフォントでは日本語が記述できませんので、日本語を利用できるフォントを指定します。サンプル(図32-1)では、フリーで利用できる花園フォントを使用しています。フォントを指定後、文字のサイズや記述する文字列、記述する位置、文字コードを指定します。生成したページは1のインスタンスに1ページ分のデータとして追加します(4)。saveメソッドでファイルとして出力します(5)。
※以下では、本稿の前後を合わせて5回分(第8回~第12回)のみ表示しています。
連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。
8. 表組みや画像/ハイパーリンク付きのPDFを作成する(FPDF)
FPDF(PDF_Japanese)クラスのメソッドを利用したさまざまな表現――文字列の装飾や画像の貼り付け、リンクの設置、表組みなどについて説明する。書籍転載の8本目(書籍内の番号は「30」)。
10. 【現在、表示中】≫ PDFファイルを読み込む/生成する(Zend_Pdf)
PDFファイルの読み込みや生成が容易にできるライブラリ「Zend¥Pdf」の基本的な使い方を説明する。書籍転載の10本目(書籍内の番号は「32」)。
11. テンプレートエンジンでロジックとレイアウトを分離する(Smarty)
PHPで人気のテンプレートエンジン「Smarty」の基本的な使い方を説明する。書籍転載の11本目(書籍内の番号は「40」)。
12. テンプレートエンジンの動作パラメーターを一元管理する(Smarty)
効率化のために、Smarty派生クラスを用意して、パラメータなどの設定はそこに押し込めてしまう方法を説明する。書籍転載の12本目(書籍内の番号は「41」)。