На примере мы будем создавать счет на оплату, довольно таки распространенный вид документа, который нужно генерировать.
Для начала скачиваем библиотеку dompdf
Мы будем писать все в одном файле, так что после обращения на по адресу файла php, документ уже будет генерироваться. Делаю я это для упрощения понимания.
require_once($_SERVER["DOCUMENT_ROOT"]."/dompdf/dompdf_config.inc.php");
Теперь готовим содержимое нашего будущего документа. Все делаем всем знакомой HTML разметкой, но эта HTML разметка должна быть в переменной.
Пишем содержимое HTML для генерации PDF документа
Обратите внимание, мы закладываем в документ CSS стили и даже разместим туда свою подпись.
//разбиваем изображение для подписи в base64
$path_podpis = $_SERVER["DOCUMENT_ROOT"].'/images/podpis/podpis.png';
$type = pathinfo($path_podpis, PATHINFO_EXTENSION);
$data = file_get_contents($path_podpis);
$podpis = 'data:image/' . $type . ';base64,' . base64_encode($data);
//содержимое HTML в PDF
$content ="
<html>
<head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/>
<style>body { font-family: times; font-size: 11pt; } table{border-spacing: 0;}
@page {margin: 15px 20px 70px;}
.podpis_left
{
position: relative;
display: inline-block;
width: 392px;
font-weight: 700;
}
.podpis_left img.podpis
{
position: absolute;
right: 7%;
bottom: 12px;
width: 83px;
}
.document_number
{
text-align: center;
font-size: 15pt;
}
table {
border-spacing: 0;
border-collapse: collapse;
}
table th
{
border: 1px solid #ddd;
padding: 5px;
font-size: 10pt;
}
table td
{
padding: 5px;
}
</style>";
$content .= '<body>
<div style="margin-bottom: 30px;">
<div>Продавец</div><br/>
<p><strong>Иванов Иван Иванович</strong></p>
ИНН: 593315450321<br/>
КПП: 590334434<br/>
р/c: 40817810749771710380<br/>
к/с: 30101810900000000603<br/>
БИК: 042202603<br/>
Банк: Волго-вятский БАНК ПАО Сбербанк<br/>
</div>
<div>Покупатель</div><br/>';
$content .= '
<div style="margin-bottom: 30px;">
<p><strong>'.$company["company"].'</strong></p>
ИНН: инн_компании <br/>
КПП: кпп_компании<br/>
ОГРН: огрн_компании<br/>
р/c: рс<br/>
к/с: кс<br/>
БИК: бик<br/>
Банк: банк<br/>
</div>';
$content .= '<div style="margin-bottom: 10px;"><h1 class="document_number">Счет №31 от '.date("d.m.Y").'</h1></div>';
$content .= '<table style="border:1px solid #ddd; width: 100%; font-size:11pt; margin-bottom: 15px;" cellpadding = "0" cellspacing="0">
<tr style="">
<th style="padding: 5px 3px;">№</th>
<th style="text-align: left; width: 350px; padding-left: 10px;">Наименование</th>
<th>Ед. изм.</th>
<th>Кол-во</th>
<th>Цена (руб.)</th>
<th>Сумма (руб.)</th>
</tr>
<tr>
<td style="text-align: center; border: 1px solid #ddd; padding: 5px 3px;">1</td>
<td>Услуги по договору №02/10/2021 на создание сайта</td>
<td style="text-align: center; border: 1px solid #ddd;">шт.</td>
<td style="text-align: center; border: 1px solid #ddd;">1</td>
<td style="text-align: center; border: 1px solid #ddd;">25 000,00</td>
<td style="text-align: center; border: 1px solid #ddd;">25 000,00</td>
</tr>
<tr>
<td colspan="3" rowspan="2" style="border: 1px solid #ddd;"></td>
<td colspan="2" style="border: 1px solid #ddd;"><strong>Итого:</strong></td>
<td style="text-align: center; border: 1px solid #ddd;"><strong>25 000,00</strong></td>
</tr>
<tr>
<td colspan="2" style="border: 1px solid #ddd;"><strong>Всего к оплате:</strong></td>
<td style="text-align: center; border: 1px solid #ddd;"><strong class="summa">25 000,00</strong></td>
</tr>
</table>
<div><strong>Сумма прописью: двадцать пять тысяч рублей 00 копеек</strong></div>
<br/>
<div class="podpis_left"><img src="'.$podpis.'" class="podpis"/> Иванов Иван Иванович ____________________</div>
</body></html>
';
Содержимое готово, теперь приступаем к самой генерации PDF документа на PHP
Генерация PDF документа и скачивание
$html = mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8');
$dompdf = new DOMPDF();// Создаем обьект
$dompdf->load_html($html, 'UTF-8'); // Загружаем в него наш html код
$dompdf->render(); // Создаем из HTML PDF
// $dompdf->stream('mypdf.pdf'); // Выводим результат (скачивание)
$output = $dompdf->output();
Или сохраняем наш PDF на сервере
//папка куда сохроняем
$img_Dir_Str = "invoice/";
$img_Dir = $_SERVER['DOCUMENT_ROOT']."/". $img_Dir_Str;
@mkdir($img_Dir, 0777);
//сохранение pdf на сервере
$file = "Сгенерированный PDF документ на PHP.pdf";
file_put_contents($img_Dir.$file, $output);
Вам остается только экспериментировать с размерами подписи, с ее расположением, меняя параметры CSS.
Собственно все! Пользуйтесь!
Можно конечно еще улучшить скрипт
- Загнать сумму в переменную и выводить ее прописью (из 25000 в двадцать пять тысяч рублей 00 коп.)
- Сформировать в догонку акт выполненных работ
- А еще до кучи какой-нибудь договор
Если Вам нужно написать готовый инструмент для генерации документов, то пишите, посмотрим что можно сделать под Ваш задачи.
Пишите в комментариях, если нужно дописать функцию перевода числа в прописной вид.