Deep Insider の Tutor コーナー
>>  Deep Insider は本サイトからスピンオフした姉妹サイトです。よろしく! 
書籍転載:PHPライブラリ&サンプル実践活用[厳選100]

書籍転載:PHPライブラリ&サンプル実践活用[厳選100]

PDFファイルを読み込む/生成する(Zend_Pdf)

2014年8月26日

PDFファイルの読み込みや生成が容易にできるライブラリ「Zend¥Pdf」の基本的な使い方を説明する。書籍転載の10本目(書籍内の番号は「32」)。

WINGSプロジェクト 片渕 彼富
  • このエントリーをはてなブックマークに追加

書籍転載について

 本コーナーは、技術評論社発行の書籍『PHPライブラリ&サンプル実践活用[厳選100]』の中から、特にBuild Insiderの読者に有用だと考えられる項目を編集部が選び、同社の許可を得て転載したものです。

 

 『PHPライブラリ&サンプル実践活用[厳選100]』の詳細や購入は技術評論社のサイト目次ページをご覧ください。

ご注意

 本記事は、書籍の内容を改変することなく、そのまま転載したものです。このため用字用語の統一ルールなどは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を記述し、インストールコマンドでダウンロードします。

JSON
"require": {
  "zendframework/zendpdf": "dev-master"
}
リスト32-1 composer.json

PDFを読み込む

 Zend¥Pdfを利用すると、手軽にPDFを読み書きすることができます。リスト32-2はPDFファイルを読み込んで、ブラウザに表示する例です(1)。PDFファイルを指定して、ZendPdf¥PdfDocumentクラスのインスタンスを生成します(2)。読み込んだPDFファイルの内容には、render()メソッドでアクセスできます。ヘッダを指定して、echoメソッドでPDFファイルの内容を出力するとブラウザでPDFを表示することができます(3)。

PDFをマージする

PHP
// 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-2 pdfreader.php

 リスト32-3は、複数のPDFファイルをマージして1つのPDFとして扱う例です。前項と同様にPDFを読み込む際には、ZendPdf¥PdfDocumentクラスを利用します。

PHP
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;
  }
}
リスト32-3 pdfmerge.php

 マージしたい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を新規で作成し、ファイルとして保存する例です。

PHP
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();
リスト32-4 pdf.php

 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)
表32-1 ZendPdf\Pageクラスでサイズを指定するパラメータ

 PDFに内容を記述するフォントを指定します(3)。デフォルトのフォントでは日本語が記述できませんので、日本語を利用できるフォントを指定します。サンプル(図32-1)では、フリーで利用できる花園フォントを使用しています。フォントを指定後、文字のサイズや記述する文字列、記述する位置、文字コードを指定します。生成したページは1のインスタンスに1ページ分のデータとして追加します(4)。saveメソッドでファイルとして出力します(5)。

図32-1 PDFを作成する

※以下では、本稿の前後を合わせて5回分(第8回~第12回)のみ表示しています。
 連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。

書籍転載:PHPライブラリ&サンプル実践活用[厳選100]
8. 表組みや画像/ハイパーリンク付きのPDFを作成する(FPDF)

FPDF(PDF_Japanese)クラスのメソッドを利用したさまざまな表現――文字列の装飾や画像の貼り付け、リンクの設置、表組みなどについて説明する。書籍転載の8本目(書籍内の番号は「30」)。

書籍転載:PHPライブラリ&サンプル実践活用[厳選100]
9. 既存のPDF文書をもとに新たなPDF文書を生成する(FPDI)

FPDIを使って、既存のPDF文書をテンプレートとして引用する方法を説明する。書籍転載の9本目(書籍内の番号は「31」)。

書籍転載:PHPライブラリ&サンプル実践活用[厳選100]
10. 【現在、表示中】≫ PDFファイルを読み込む/生成する(Zend_Pdf)

PDFファイルの読み込みや生成が容易にできるライブラリ「Zend¥Pdf」の基本的な使い方を説明する。書籍転載の10本目(書籍内の番号は「32」)。

書籍転載:PHPライブラリ&サンプル実践活用[厳選100]
11. テンプレートエンジンでロジックとレイアウトを分離する(Smarty)

PHPで人気のテンプレートエンジン「Smarty」の基本的な使い方を説明する。書籍転載の11本目(書籍内の番号は「40」)。

書籍転載:PHPライブラリ&サンプル実践活用[厳選100]
12. テンプレートエンジンの動作パラメーターを一元管理する(Smarty)

効率化のために、Smarty派生クラスを用意して、パラメータなどの設定はそこに押し込めてしまう方法を説明する。書籍転載の12本目(書籍内の番号は「41」)。

サイトからのお知らせ

Twitterでつぶやこう!