プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
PHP、PHPExcelでPDFを作成してみた
風の噂で、PHPExcelを使って、Excelを元にPDFを作成できるとの話を聞きました。
マジで?

PDFを作成するときってレイアウトの調整が大変なのですよね。
もしExcelをそのままPDF化できるならこの問題が一気に解決じゃないですかぁ(人´∀`)
レイアウトは罫線で書いて、幅とかもセルのサイズを調整すれば良いんでしょ?

と言う訳で期待に胸を膨らませながら早速試してみました。

手順としては

1.Excelテンプレートを用意
2.「1.」をベースにPHPExcel経由で値を設定してExcel出力
3.「1.」をベースにPHPExcel経由で値を設定してPDF出力

の順番で試してみました。

まずは元となるExcelのテンプレートを用意します。
適当にこんな中身のExcelファイルを用意しましたよっとφ(--)

20131126-01.png

次に、取りあえずExcelとして出力してみました。

こんなコードを書いてφ(--)

<?php

    //PHPExcelをインクルード
    require_once(dirname(__FILE__) . '/Classes/PHPExcel.php');
    require_once(dirname(__FILE__) . '/Classes/PHPExcel/IOFactory.php');



    //テンプレート読み込み
    $filepath = "./test2.xls";
    $objReader = PHPExcel_IOFactory::createReader('Excel5');
    $book = $objReader->load($filepath);

    //シート設定
    $book->setActiveSheetIndex(0);
    $sheet = $book->getActiveSheet();
    $sheet->setTitle('sheet name'); //シート名指定

    // セルに値を入れる
    $sheet->setCellValue('A1', 'hoge');
    $sheet->setCellValue('A2', 'あいうえおかきくけこさしすせそ');

    // Excel形式で出力する
    $outputFileName = "o.xls";
    header('Content-Type: application/vnd.ms-excel');
    header('Content-Disposition: attachment;filename="' . $outputFileName . '"');
    header('Cache-Control: max-age=0');

    $writer = PHPExcel_IOFactory::createWriter($book, "Excel5");
    $writer->save('php://output');

?>

実行結果はこんな感じφ(--)

20131126-02.png

ここまでは問題無いですね。
これで下準備ができました。

それではいよいよ本番、ExcelではなくPDFとして出力してみますかね。

こんな感じにコードを変更φ(--)

<?php

    //PHPExcelをインクルード
    require_once(dirname(__FILE__) . '/Classes/PHPExcel.php');
    require_once(dirname(__FILE__) . '/Classes/PHPExcel/IOFactory.php');



    //テンプレート読み込み
    $filepath = "./test2.xls";
    $objReader = PHPExcel_IOFactory::createReader('Excel5');
    $book = $objReader->load($filepath);

    //シート設定
    $book->setActiveSheetIndex(0);
    $sheet = $book->getActiveSheet();
    $sheet->setTitle('sheet name'); //シート名指定

    // セルに値を入れる
    $sheet->setCellValue('A1', 'hoge');
    $sheet->setCellValue('A2', 'あいうえおかきくけこさしすせそ');

    // PDF形式で出力する
//    $outputFileName = "o.xls";
    $outputFileName = "o.pdf";
//    header('Content-Type: application/vnd.ms-excel');
    header('Content-Type: application/pdf');
    header('Content-Disposition: attachment;filename="' . $outputFileName . '"');
    header('Cache-Control: max-age=0');

//    $writer = PHPExcel_IOFactory::createWriter($book, "Excel5");
    $writer = PHPExcel_IOFactory::createWriter($book, "PDF");
    $writer->setFont('arialunicid0-japanese');    //日本語文字化け対策
    $writer->save('php://output');

?>

実際に変更したのは出力部分だけです。
ちなみに

$writer->setFont('arialunicid0-japanese');

は日本語の文字化け対策ね。
PDF化するときのフォントはデフォルトで「freesans」とかいうのになっているようで、
何も考えずに日本語を入力すると文字化けしちゃうのです。
そのため、フォント指定をじゃぱにーずに変更しています。

それではいよいよ結果発表です。
ドキドキの出力結果はこちらφ(--)

20131126-03.png

うん、惜しい_| ̄|○

比較しやすいように結果を並べてみますねφ(--)

20131126-04.png

うん、やっぱり惜しい_| ̄|○

努力は買います。
再現しようと頑張ってくれているのは評価します。

でも、お仕事で使うにはちょ~~っと厳しいかな(^^;

PHPExcelやPDF化モジュールのバージョン等、
環境依存でレイアウトが崩れている可能性は無きにしも非ずですが、
やはり見た目の再現性に限界はありそうですね。

結論としては

・PHPExcelでPDFを出力することは可能
・Excelの見た目通りにPDF化してくれるとは限らない

ってなところですかね。

ちょっと残念です(´A`)
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:PHPExcel  thema:システム開発 - genre:コンピュータ  Posted by ササキマコト 

| HOME | next