Генерация word документа на php (шаблон .docx)
В этом уроке мы научимся создавать word документы .docx по заготовленному шаблону.
На примере мы будем создавать счет на оплату, довольно таки распространенный вид документа, который нужно генерировать.
Для начала скачиваем библиотеку dompdf
Мы будем писать все в одном файле, так что после обращения на по адресу файла php, документ уже будет генерироваться. Делаю я это для упрощения понимания.
require_once($_SERVER["DOCUMENT_ROOT"]."/dompdf/dompdf_config.inc.php");Теперь готовим содержимое нашего будущего документа. Все делаем всем знакомой HTML разметкой, но эта HTML разметка должна быть в переменной.
Обратите внимание, мы закладываем в документ 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
$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.
Если Вам нужно написать готовый инструмент для генерации документов, то пишите, посмотрим что можно сделать под Ваш задачи.
Пишите в комментариях, если нужно дописать функцию перевода числа в прописной вид.
Напиши комментарий и поделись своим мнением, все ли у тебя получилось, какие сложности возникли или просто напиши спасибо за статью
Не хотите разбираться с кодом самостоятельно? Я могу установить, настроить и адаптировать решение под ваш сайт или разработать аналогичную функциональность под ваши требования.
Обратиться за помощью