Наверх

Генерация PDF документ на PHP с помощью dompdf

Опубликовано:
112
1 2 3 4 5
(100%) / 1

На примере мы будем создавать счет на оплату, довольно таки распространенный вид документа, который нужно генерировать.

Для начала скачиваем библиотеку 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);


//содержимое PDF в HTML
$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.

Собственно все! Пользуйтесь!

 

Можно конечно еще улучшить скрипт

  1. Загнать сумму в переменную и выводить ее прописью (из 25000 в двадцать пять тысяч рублей 00 коп.)
  2. Сформировать в догонку акт выполненных работ
  3. А еще до кучи какой-нибудь договор

 

Если Вам нужно написать готовый инструмент для генерации документов, то пишите, посмотрим что можно сделать под Ваш задачи.

 

Пишите в комментариях, если нужно дописать функцию перевода числа в прописной вид. 



Дорогой web-мастер.
Для меня очень важна обратная связь от Вас в виде лайков или рейтинга.
Пожалуйста оцените эту публикацию или поставь лайк за старание.
Статья подготовлена для Вас сайтом kisameev.ru
Перевел: Кисамеев Дмитрий
Статью просмотрели: 112
Понравилось:
Поделится ссылкой
Комментариев...
Оставьте его первым.

Для вставки кода используйте комментарии от ВК или FB:

Похожие публикации

Наложение текста на картинку при помощи php не такая уж и сложная задача, главное разобраться с функцией imagettftext(), поlстраивая координаты по...
В этом уроке мы будем создавать онлайн калькулятор услуг. В качестве примера мы будем брать калькулятор ремонта, который делает онлайн...
В этом уроке мы научимся создавать word документы .docx по заготовленному шаблону.
В этом уроке мы научимся создавать word документы .docx по заготовленному шаблону.

Нашли баг или ошибку?

Выдели текст
мышкой и нажми:
Нашел ошибку