Blade (PHP)
PHP の Blade テンプレートエンジンを使用して HTML 文字列を生成し、それを pdfg の API に送信して PDF に変換する方法を説明します。
技術的な概要
- Blade テンプレートを作成
- テンプレートにデータを渡して HTML 文字列を生成
- 生成された HTML 文字列を pdfg の API に送信して PDF 化
サンプル
テンプレートの定義
{{-- templates/invoice.blade.php --}}
<!DOCTYPE html>
<html>
<head></head>
<body>
<div class="invoice">
<h1>請求書</h1>
<table>
<thead>
<tr>
<th>品目</th>
<th>金額</th>
</tr>
</thead>
<tbody>
@foreach ($items as $item)
<tr>
<td>{{ $item['name'] }}</td>
<td>{{ $item['price'] }}円</td>
</tr>
@endforeach
</tbody>
</table>
<p class="total">合計: {{ $total }}円</p>
</div>
</body>
</html>
テ ンプレートの使用と PDF 生成
<?php
// generate_pdf.php
require 'vendor/autoload.php';
use Illuminate\View\Factory;
use Illuminate\View\FileViewFinder;
use Illuminate\View\Engines\CompilerEngine;
use Illuminate\View\Engines\EngineResolver;
use Illuminate\View\Compilers\BladeCompiler;
use Illuminate\Filesystem\Filesystem;
// Bladeエンジンの設定
$files = new Filesystem;
$compiler = new BladeCompiler($files, 'cache');
$resolver = new EngineResolver;
$resolver->register('blade', function () use ($compiler) {
return new CompilerEngine($compiler);
});
$finder = new FileViewFinder($files, ['templates']);
$factory = new Factory($resolver, $finder, new Illuminate\Events\Dispatcher);
// データの準備
$items = [
['name' => '商品A', 'price' => 1000],
['name' => '商品B', 'price' => 2000],
];
$total = 3000;
// HTML文字列の生成
$html = $factory->make('invoice', [
'items' => $items,
'total' => $total,
])->render();
// pdfgのAPIにリクエスト
$ch = curl_init('https://api.pdfg.net/v1');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Authorization: Bearer YOUR_API_KEY'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'html' => $html,
'pdfOptions' => [
'format' => 'A4'
]
]));
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
// PDFの保存
if ($httpCode === 200) {
file_put_contents('invoice.pdf', $response);
}