PHPでPDFを作成する方法
はい、hebiです。
毎日手動で集計した情報をPDF化してチャットに送信する作業を自動化したい。という要望の対応を行いました。
本記事では対応した一部のPHPでPDF化を行う方法を記事にしたいと思います。
PDFを出力するためのライブラリTCPDFを使います。
今回はcomposerを使ってTCPDFをインストールしますが、手動で配置する場合は以下のgithubからダウンロードできます。
前提
本記事では以下記事で作成したCodeIgniter4のプロジェクトで行っていきます。
また、composerを使ってインストールしますので、composerについても以下の記事を参考ください。
PDF作成手順
PHPでPDFを作成する手順を記述していきます。
TCPDFのインストール
Tera Termでログインし、カレントディレクトリをプロジェクトのディレクトに移動します。
cd /var/www/html/my_codeigniter_project
composerを実行してTCPDFをインストールします。
composer require tecnickcom/tcpdf
「Using version ^6.7 for tecnickcom/tcpdf」のようなメッセージが表示されインストール完了すると、「/var/www/html/my_codeigniter_project/vendor/tecnickcom/tcpdf」にソースコードが保存されます。
PDF化するクラスを作成
今回メインの処理となるPDF化するクラスをapp\Librariesに作成しましょう。
<?php
namespace App\Libraries;
use TCPDF;
class Pdf extends TCPDF
{
public function __construct()
{
parent::__construct();
}
// PDFを生成する。
public function generatePDF($content)
{
// ページを追加します。
$this->AddPage();
// フォントとサイズを設定します。
$this->SetFont('kozgopromedium', '', 12);
// HTMLを挿入します。
$this->writeHTML($content);
// 出力するパス
$pdfFilePath = WRITEPATH . 'sample.pdf'; // PDFファイルの保存先パス
// PDFを出力します。
$this->Output($pdfFilePath, 'F');
}
}
WRITEPATH(/var/www/html/my_codeigniter_project/writable)にsample.pdfを出力するgeneratePDF関数を作成しました。
generatePDFを実行するコントローラ作成
generatePDFを実行し、PDFを出力してみましょう。
コントローラを作成し、実行するとPDFを出力できるようにします。
<?php
namespace App\Controllers;
use App\Libraries\Pdf;
class PdfController extends BaseController
{
public function index()
{
// PDF内容の生成
$content = '<table border="1">
<tr>
<td>Column</td>
<td>Column</td>
<td>Column</td>
</tr>
<tr>
<td>Data</td>
<td>Data</td>
<td>Data</td>
</tr>
<tr>
<td>Data</td>
<td>Data</td>
<td>Data</td>
</tr>
</table>';
// Pdfライブラリのインスタンスを作成
$pdf = new Pdf();
// PDFを生成
$pdf->generatePDF($content);
}
}
ルーティング設定
PdfControllerを実行できるようにルーティングの設定を行います。
<?php
use CodeIgniter\Router\RouteCollection;
/**
* @var RouteCollection $routes
*/
$routes->get('/', 'Home::index');
// ユーザ取得
$routes->get('user/(:num)', 'User::get_user/$1');
// ユーザ追加
$routes->post('user/', 'User::add_user');
// PDF出力
$routes->get('pdf', 'PdfController::index');
以上でPDF出力処理の実装完了です。
「http://ドメイン名/pdf」にアクセスすると、/writable/sample.pdfに出力されます!
最後に
いかがだったでしょうか。PDFを出力することはできましたでしょうか?
DBから取得したデータをPDFに出力して、SlackやらMattermostやらのチャットに送信することで、自動でレポートを共有することができるようになります。
日々時間のかかる作業は自動化していきたいですね(;’∀’)
最後までお読みいただきありがとうございました(^^♪