2013.
11.
26
02:47:41
風の噂で、PHPExcelを使って、Excelを元にPDFを作成できるとの話を聞きました。
マジで?
PDFを作成するときってレイアウトの調整が大変なのですよね。
もしExcelをそのままPDF化できるならこの問題が一気に解決じゃないですかぁ(人´∀`)
レイアウトは罫線で書いて、幅とかもセルのサイズを調整すれば良いんでしょ?
と言う訳で期待に胸を膨らませながら早速試してみました。
手順としては
1.Excelテンプレートを用意
2.「1.」をベースにPHPExcel経由で値を設定してExcel出力
3.「1.」をベースにPHPExcel経由で値を設定してPDF出力
の順番で試してみました。
まずは元となるExcelのテンプレートを用意します。
適当にこんな中身のExcelファイルを用意しましたよっとφ(--)

次に、取りあえずExcelとして出力してみました。
こんなコードを書いてφ(--)
実行結果はこんな感じφ(--)

ここまでは問題無いですね。
これで下準備ができました。
それではいよいよ本番、ExcelではなくPDFとして出力してみますかね。
こんな感じにコードを変更φ(--)
実際に変更したのは出力部分だけです。
ちなみに
は日本語の文字化け対策ね。
PDF化するときのフォントはデフォルトで「freesans」とかいうのになっているようで、
何も考えずに日本語を入力すると文字化けしちゃうのです。
そのため、フォント指定をじゃぱにーずに変更しています。
それではいよいよ結果発表です。
ドキドキの出力結果はこちらφ(--)

うん、惜しい_| ̄|○
比較しやすいように結果を並べてみますねφ(--)

うん、やっぱり惜しい_| ̄|○
努力は買います。
再現しようと頑張ってくれているのは評価します。
でも、お仕事で使うにはちょ~~っと厳しいかな(^^;
PHPExcelやPDF化モジュールのバージョン等、
環境依存でレイアウトが崩れている可能性は無きにしも非ずですが、
やはり見た目の再現性に限界はありそうですね。
結論としては
・PHPExcelでPDFを出力することは可能
・Excelの見た目通りにPDF化してくれるとは限らない
ってなところですかね。
ちょっと残念です(´A`)
マジで?
PDFを作成するときってレイアウトの調整が大変なのですよね。
もしExcelをそのままPDF化できるならこの問題が一気に解決じゃないですかぁ(人´∀`)
レイアウトは罫線で書いて、幅とかもセルのサイズを調整すれば良いんでしょ?
と言う訳で期待に胸を膨らませながら早速試してみました。
手順としては
1.Excelテンプレートを用意
2.「1.」をベースにPHPExcel経由で値を設定してExcel出力
3.「1.」をベースにPHPExcel経由で値を設定してPDF出力
の順番で試してみました。
まずは元となるExcelのテンプレートを用意します。
適当にこんな中身のExcelファイルを用意しましたよっとφ(--)

次に、取りあえず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');
?>
//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');
?>
実行結果はこんな感じφ(--)

ここまでは問題無いですね。
これで下準備ができました。
それではいよいよ本番、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');
?>
//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」とかいうのになっているようで、
何も考えずに日本語を入力すると文字化けしちゃうのです。
そのため、フォント指定をじゃぱにーずに変更しています。
それではいよいよ結果発表です。
ドキドキの出力結果はこちらφ(--)

うん、惜しい_| ̄|○
比較しやすいように結果を並べてみますねφ(--)

うん、やっぱり惜しい_| ̄|○
努力は買います。
再現しようと頑張ってくれているのは評価します。
でも、お仕事で使うにはちょ~~っと厳しいかな(^^;
PHPExcelやPDF化モジュールのバージョン等、
環境依存でレイアウトが崩れている可能性は無きにしも非ずですが、
やはり見た目の再現性に限界はありそうですね。
結論としては
・PHPExcelでPDFを出力することは可能
・Excelの見た目通りにPDF化してくれるとは限らない
ってなところですかね。
ちょっと残念です(´A`)