PHPWordを触ってみた


PHPWordを触ってみた

PHPOfficeにはPHPExcelの他に、PHPWordやPHPPowerpointがあるのをご存じでしょうか?

とりあえず、その中でPHPWordを触ってみました。

導入

README通りに進めます。

composer.json

{
    "require": {
       "phpoffice/phpword": "dev-master"
    }
}

で、composer updateでインストール完了

書いてみる

<?php
require_once 'vendor/autoload.php';
$phpWord = new \PhpOffice\PhpWord\PhpWord();
$section = $phpWord->addSection();
//文字
$section->addText(
    'ほげほげほげたろー',
    array('name' => 'MS ゴシック', 'size' => 20, 'color' => '66FFFF', 'bold' => true)
);
//改行
$section->addText(
    'ほげほげほげたろー',
    array('name' => 'MS ゴシック', 'size' => 20, 'color' => '66FFFF', 'bold' => true, 'italic' => true, 'underline' => 'dash')
);

//てーぶる
$tableStyle = array(
    'borderColor' => '006699',
    'borderSize' => 6,
    'cellMargin' => 50
);
$table = $section->addTable($tableStyle);
$table->addRow();
$table->addCell(2000, array('bgColor' => 'FFFF66'))->addText('あああ');
$table->addCell(2000, array('bgColor' => 'FF6666'))->addText('いいい');

$table->addRow();
$table->addCell(2000, array('bgColor' => '66FF66'))->addText('ううう');
$table->addCell(2000, array('bgColor' => '6666FF'))->addText('えええ');
//画像
$section->addImage('test.jpg');

// Saving the document as OOXML file...
$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');
$objWriter->save('helloWorld.docx');

これで何かとりあえずワードの文章ができました!

まとめ

上記例ではテンプレートなしで作業しましたが、テンプレートも使用ができます。

また、ネットには日本語は対応してないって記事が結構ありますが現在は普通に対応しているので日本語でもそのままPHPWordが使えます。

細かい調整はやや難しそうですが、テンプレートから値を埋め込むなどの対応で可能な範囲であれば問題なく使用できそうです!

追記

PDFで出せないのって話が出たのでちょっと試してみました。

//tcpdfのダウンロードが必要
\PhpOffice\PhpWord\Settings::setPdfRendererPath('./tcpdf');
\PhpOffice\PhpWord\Settings::setPdfRendererName('TCPDF');

$objWriter2 = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'PDF');
$objWriter2->SetFont('kozminproregular', '', 12);// 日本語フォント
$objWriter2->save('helloWorld.pdf');

で、とりあえずは出来ました。

tcpdf

ただ、テーブルの背景色や画像などが取ってこれなかったです。

もしかしたら、PDF変換ツールを別のものに置き換えればもっときれいに出るかもですがとりあえず出来なくはないというところまで。