В этом уроке я покажу вам, как использовать PPH для динамического создания PDF. В качестве генератора мы будем использовать mPDF, так как он обладает наибольшей функциональностью из всех пакетов генераторов PDF.
Посмотреть на YouTube
Скачать mPDF
Чтобы начать работу, нам нужно установить mPDF в наш проект. Откройте ваш проект в терминале или CMD и выполните следующий вызов composer.
composer require mpdf/mpdf
Это добавит mPDF в ваш проект в папку vendor. Далее вам нужно создать файл index.php
и потребовать автозагрузку composer, используя следующий код.
require_once __DIR__ . '/vendor/autoload.php';
Теперь, когда вы включили автозагрузчик, вы можете просто вызвать класс mPDF, используя следующий код:
$mpdf = new MpdfMpdf();
Это позволит вам инициировать пакет, когда вам это необходимо. Вы можете протестировать его, добавив в свой файл следующее:
$mpdf->WriteHTML('<h1>Hello World</h1>');
$mpdf->Output();
Теперь просто перейдите на свой сайт, и вы должны увидеть PDf с надписью Hello World.
Защита паролем
На всякий случай вы можете добавить пароль к вашему документу. Вы можете установить пароль, который будет использоваться при просмотре, печати или сохранении документа.
Для этого вы используете следующую функцию. Добавьте ее чуть ниже того места $mpdf = new MpdfMpdf();
кода, который вы написали ранее.
SetProtection ([$permissions], $user_password, $owner_password, $length)
$mpdf->SetProtection([], 'UserPassword', 'MyPassword');
Ваши разрешения на защиту следующие:
'copy'
'print'
'modify'
'annot-forms'
'fill-forms'
'extract'
'assemble'
'print-highres'
Установка свойств файла
Вы можете легко добавить или изменить свойства файла, добавив следующие методы чуть ниже кода $mpdf = new MpdfMpdf();
, который вы написали ранее, или, если вы используете защиту паролем, то чуть ниже.
$mpdf->SetTitle('The DevDrawer Is Awesome'); // add a document title
$mpdf->SetAuthor('The DevDrawer'); // add the author name
Верхние и нижние колонтитулы
Перед добавлением любого содержимого в PDF, вы, возможно, захотите установить верхний или нижний колонтитул. Стандартные верхний и нижний колонтитулы имеют прикрепленную к ним линию. После установки верхнего или нижнего колонтитула эту строку можно легко удалить.
Верхний колонтитул:
$mpdf->defaultheaderline = 0; //remove this if you want the line
$mpdf->setHeader('|Document Title|');
Нижний колонтитул:
$mpdf->defaultfooterline = 0; // remove this if you want the line
$mpdf->setFooter('Document Title|{DATE F j, Y}|{PAGENO}');
Как в верхнем, так и в нижнем колонтитуле вы можете заметить символы трубы (|). Они позволяют разделить верхний или нижний колонтитул на левый, центральный и правый. То есть, по сути, что-то вроде этого: left|center|right
.
Вы также можете использовать абстрактные шорткоды для определенных вещей, таких как дата {DATE F j, Y}
или номер страницы {PAGENO}
. Дата использует стандартное форматирование даты PHP.
Добавьте таблицу стилей
Вы можете использовать базовое форматирование PDF (лучший способ — таблицы blah), но вы также можете использовать встроенный CSS или внешние таблицы стилей CSS.
Сначала создайте таблицу стилей. Имейте в виду, что не каждый стиль будет хорошо отображаться в PDF. В нашем случае мы создадим простой /style.css
для нашего PDF.
@import url('https://fonts.googleapis.com/css2?family=Open+Sans&family=Roboto&display=swap');
body {
font-family: 'Open Sans', sans-serif;
}
h1 {
font-family: 'Roboto', sans-serif;
}
ul {
list-style-type: none;
margin:0;
padding:0;
}
Теперь мы можем использовать PHP, чтобы получить таблицу стилей и использовать ее в нашем PDF. Добавьте следующий код перед любым содержимым HTML.
$stylesheet = file_get_contents('style.css');
$mpdf->WriteHTML($stylesheet, MpdfHTMLParserMode::HEADER_CSS);
Этот код получит таблицу стилей и добавит ее в наш заголовок для использования в PDF. Помните, что при необходимости вы также можете использовать встроенный CSS.
Добавление водяного знака
Иногда в юридических или эстетических целях необходимо помечать документы водяными знаками. Вы можете легко добавить водяной знак на каждую страницу.
$mpdf->SetWatermarkText('THE DEV DRAWER'); // set the watermark
$mpdf->showWatermarkText = true; // make it show
$mpdf->watermarkTextAlpha = .1; // set the opacity
Добавить штрих-код
Это очень удобная функция, если вы хотите добавить штрихкод в PDF. При необходимости вы можете добавить штрих-код для отслеживания или учета.
Просто добавьте HTML штрих-код в документ, и он сам его разберет. Я рекомендую использовать ISBN для обычных штрихкодов.
$mpdf->WriteHTML('<br><barcode code="123-456-7890" text="ISBN" class="barcode" />');
Использование PHP для генерации HTML
Вы также можете вызвать класс или метод, который будет генерировать HTML для PDF, а не встраивать его, как мы делали ранее.
Например, мы можем создать класс Foo.php
в папке includes
. Он может выглядеть примерно так:
class Foo {
public function bar() {
$test = 'This is a test from a class';
$test .= '<br><img src="images/1.jpg" style="width:300px; height:auto;">';
$test .= '
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
</ul>';
return $test;
}
}
Затем мы можем добавить код в наш файл index.php
для извлечения класса, чтобы мы могли вызвать его:
require_once __DIR__ . '/includes/Foo.php';
Затем мы вызываем его с помощью:
$mpdf->WriteHTML((new Foo())->bar());
Вот, теперь у вас есть HTML-код, приходящий из внешнего класса, вокруг которого можно строить методы.
Вывод PDF
Вы можете либо отобразить PDF в браузере, либо сохранить его в папке на вашем сервере, либо просто загрузить его при вызове.
Стандартное отображение PDF называется так, как мы это делали в первой части этого руководства выше:
$mpdf->Output();
Вы можете добавить флаги к этому вызову, чтобы сделать его скачивание (D) или сохранение на вашем сервере (F). Эти опции будут выглядеть следующим образом:
$mpdf->Output('filename.pdf', 'D');
или
$mpdf->Output('filename.pdf', 'F');
Имейте в виду, что вы можете использовать только один из этих 3 вариантов. Первый из них — это тот, который использует mPDF.
Документация mPDF
Вы можете узнать больше о mPDF, зайдя на их сайт и просмотрев документацию. В ней описано множество функций. В этом руководстве я расскажу об основных и наиболее часто используемых функциях.
Полная документация mPDF
Заключение
Теперь вы должны уметь успешно создавать PDF, используя только PHP. Чем больше содержимого в PDF, тем дольше он загружается, но эта небольшая библиотека является большим ресурсом, когда вам нужно создавать динамические PDF на лету.