Динамическое создание PDF с помощью PHP

В этом уроке я покажу вам, как использовать 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 на лету.

Оцените статью
devanswers.ru
Добавить комментарий