Создание PDF через HTML форму с помощью PHP

Подробное руководство по созданию и скачиванию файлов PDF с помощью PHP через форму обратной связи на HTML.

PDF через PHP
PDF через PHP

Устанавливаем Composer

Из-за того, что данный материал создан из серии «для себя», я опишу более подробные шаги реализации проекта, чтобы возвращаться сюда для напоминания себе некоторых моментов, а то вдруг склероз.

Постараемся сделать проект более профессионально, поэтому будем работать через Composer, который мы установим с самого начала. Composer — это менеджер зависимостей в PHP.

Официальный сайт — getcomposer.org.

Для начала мы подключаемся к нашему хостингу или серверу через SSH, а для этого мы используем PuTTy.

После входа мы попадаем в терминал:

Забегая вперед немного хотел сказать, что в терминале для копирования и вставки не работают стандартные сочетания Ctrl+V, Ctrl+C.

Исторически Ctrl+C это сочетание клавиш для прерывания текущего процесса. Поэтому, для копирования и вставки при работе в терминале используются Ctrl+Insert и Shift+Insert соответственно.

Внимание! Используйте Shift+Insert для вставки скопированного текста в терминал.

Теперь переходим в папку нашего сайта, где мы хотим иметь возможность работать с зависимостями.

Для проверки работы терминала и того, что у нас всё в порядке мы можем проверить версию PHP, введя:

$ php -v

Получаем:

Теперь перейдем к установке. Вводим:

$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

После чего вводим:

$ php -r "if (hash_file('sha384', 'composer-setup.php') === 'e5325b19b381bfd88ce90a5ddb7823406b2a38cff6bb704b0acc289a09c8128d4a8ce2bbafcd1fcbdc38666422fe2806') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

Этими двумя командами мы загружаем программу установки в текущую директорию и проверяем инсталлятор SHA-384.

Видим надпись, что установщик проверен.

Далее вводим для запуска установщика:

$ php composer-setup.php

И, наконец, удаляем установщик:

$ php -r "unlink('composer-setup.php');"

Командой ls -1a мы проверяем, что установщик удален:

На этом этапе может возникнуть непонятная ситуация, т.к. нам нужно создать проект, но мы получим предупреждение, что не найден файл composer.json.

Мы создадим его вручную в корне, используя nano:

$ nano composer.json

Мы в файл вставляем:

{
    "require": {
        "php": ">=5.3.2"
    }
}

Далее выходим через CTRL+X и жмем Y для сохранения файла.

И теперь устанавливаем зависимости командой:

$ php composer.phar install

Библиотека mPDF

На данном этапе мы установили в локальную папку на сервере менеджер зависимостей и теперь нам нужно установить нужную библиотеку для работы с PDF — mPDF.

Для этого вводим команду:

$ php composer.phar require mpdf/mpdf

Далее запускается процесс установки:

Проверяем установку пакета в файле composer.json:

Всё ОК, библиотека добавлена.

Создание формы

Форма будет состоять из двух основных блоков — обработка формы и генерация PDF и, собственно, сама форма.

Мы создаем файл index.php в корне папки с сайтом и помещаем туда вот такой код:

<?php
require_once __DIR__ . '/vendor/autoload.php';

// получаем переменные
if(isset($_POST['fname']) && isset($_POST['lname']) && isset($_POST['email']) && isset($_POST['message']))
{
$fname = $_POST['fname'];
$lname = $_POST['lname'];
$email = $_POST['email'];
$message = $_POST['message'];

$mpdf = new \Mpdf\Mpdf();

$data = "";
$data .= "<h1>Your Details</h1>";
$data .='<strong>First Name</strong> '. $fname.'<br>';
$data .='<strong>Last Name</strong> '. $lname.'<br>';
$data .='<strong>Email</strong> '. $email .'<br>';
$data .='<strong>Message</strong> '. $message.'<br>';

$mpdf->WriteHtml($data);
$mpdf->output("myfile.pdf",'D');
}
?>
<!DOCTYPE html>
<html>
<head>

	<meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Создание PDF из HTML формы с помощью mPDF</title>
		
	<!-- Latest compiled and minified CSS -->
	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css"/>
	<link rel="stylesheet" href="/assets/css/styles.css" />

</head>
<body>
	<div class="container-fluid">
    <div class="container">
    	<div class="col-md-6 col-md-offset-3">
        	<h1>Создание PDF из HTML формы</h1>
        	<p>Заполните поля ниже для создания формы</p>

	        <form action="index.php" method="post">

	        <input type="text" name="fname" class="form-control" placeholder="Имя*" required>
	        <div class="clearfix pb-10"></div>
	        <input type="text" name="lname" class="form-control" placeholder="Фамилия*" required>
	        <div class="clearfix pb-10"></div>
	        <input type="email" name="email" class="form-control" placeholder="Email*" required>
	        <div class="clearfix pb-10"></div>
	        <textarea class="form-control" name="message" placeholder="Сообщение"></textarea>
	        <div class="clearfix pb-10"></div>
	        <p>* - обязательное поле</p>
	        <button class="btn btn-primary btn-lg" type="submit">Создать PDF</button>
	        </form>
        </div>
    </div>
    </div>
    <footer>
    <div class="container-fluid">
    	<div class="container">
    		<div class="col-sm-12 tc">
    			Демо создано <a href="https://uzabila.ru">Uzabila.com</a> для статьи <a href="https://uzabila.ru/html-to-php/">Создание PDF через HTML форму с помощью PHP"></a>
    		</div>
    	</div>
    </div>
    </footer>
</body>
</html>

Немного разберем сам код.

Сначала мы создаем простую форму с несколькими полями.

<input type="text" name="fname" class="form-control" placeholder="Имя*" required>
<input type="text" name="lname" class="form-control" placeholder="Фамилия*" required>
<input type="email" name="email" class="form-control" placeholder="Email*" required>
<textarea class="form-control" name="message" placeholder="Сообщение"></textarea>
<p>* - обязательное поле</p>
<button class="btn btn-primary btn-lg" type="submit">Создать PDF</button>

Я часто использую Bootstrap фреймворк, поэтому можно увидеть в коде стили от Bootstrap. Код ниже проверяет, что все поля заполнены:

if($_POST['fname']) && isset($_POST['lname']) && isset($_POST['email']) && isset($_POST['message'])){}

А эта часть кода отвечает за работу с библиотекой mPDF:

$mpdf = new \Mpdf\Mpdf();

$data = "";
$data .= "<h1>Your Details</h1>";
$data .='<strong>First Name</strong> '. $fname.'<br>';
$data .='<strong>Last Name</strong> '. $lname.'<br>';
$data .='<strong>Email</strong> '. $email .'<br>';
$data .='<strong>Message</strong> '. $message.'<br>';

$mpdf->WriteHtml($data);
$mpdf->output("demo.pdf",'D');

На этом всё.

Опубликовано 6 августа 2020 в 18:12
Обновлено 9 января 2024 в 14:14
Категория: Блог
Теги: