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

В этом уроке я покажу вам, как использовать PPH для динамического создания PDF. Мы будем использовать mPDF в качестве нашего генератора, так как он обладает наибольшей функциональностью из всех пакетов генератора PDF.

Посмотреть это на YouTube

Скачать mPDF

Для начала нам нужно подключить mPDF к нашему проекту. Откройте свой проект либо в терминале, либо в CMD и запустите следующий вызов композитора.

composer require mpdf/mpdf

Это добавит mPDF в ваш проект в папку поставщика. Оттуда вам нужно создать файл index.php и потребовать автозагрузчик композитора, используя следующий код.

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

Теперь, когда вы включили автозагрузчик, вы можете просто вызвать класс mPDF, используя следующий код:

$mpdf = new \Mpdf\Mpdf();

Это позволит вам инициировать пакет, когда вам это нужно. Вы можете проверить это, добавив в файл следующее:

$mpdf->WriteHTML('<h1>Hello World</h1>');
$mpdf->Output();

Теперь просто перейдите на свой веб-сайт, и вы должны увидеть PDF-файл со словами Hello World.

Защита паролем

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

Для этого вы используете следующую функцию. Добавьте его чуть ниже кода $mpdf = new \Mpdf\Mpdf();, который вы написали ранее.

SetProtection ([$permissions], $user_password, $owner_password, $length)
$mpdf->SetProtection([], 'UserPassword', 'MyPassword');

Ваши права защиты следующие:

'copy'
'print'
'modify'
'annot-forms'
'fill-forms'
'extract'
'assemble'
'print-highres'

Установить свойства файла

Вы можете легко добавить или изменить свойства файла, добавив следующие методы чуть ниже кода $mpdf = new \Mpdf\Mpdf();, который вы написали ранее, или, если вы используете защиту паролем выше, чуть ниже этого.

$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, \Mpdf\HTMLParserMode::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');

or

$mpdf->Output('filename.pdf', 'F');

Имейте в виду, что вы можете сделать только один из 3 вариантов. Первый вызывается тот, который использует mPDF.

mPDF-документация

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

Полная документация mPDF

Заключение

Теперь вы сможете успешно создать PDF-файл, используя только PHP. Чем больше содержимого в PDF-файле, тем больше времени требуется для его загрузки, но эта небольшая библиотека является большим ресурсом, когда вам нужно создавать динамические PDF-файлы на лету.