Как генерировать PDF файлы из текста средствами PHP

Раздел: Веб-разработка на PHP -> Создание PDF в PHP

Создание PDF из текста в PHP

Наиболее эффективным и гибким способом создания PDF из текста в PHP остается использование библиотеки mpdf. Она позволяет преобразовывать HTML-разметку в PDF с поддержкой UTF-8, CSS-стилей, изображений и сложной верстки. Установка выполняется через Composer:

composer require mpdf/mpdf

Text php pdf (создать pdf из текста в php)

Базовый пример создания PDF из простого текста:


<?php
require 'vendor/autoload.php';

$mpdf = new \Mpdf\Mpdf();
$mpdf->WriteHTML('<h1>Привет, мир!</h1><p>Это PDF создан из текста.</p>');
$mpdf->Output('document.pdf', 'F');
?>
Файл document.pdf будет сохранен в текущей директории.

Библиотека автоматически подбирает базовые шрифты, но для корректного отображения кириллицы рекомендуется подключить шрифты через настройки. Типичные проблемы: нехватка памяти при больших документах (решение - увеличение лимита memory_limit) или ошибки с кодировкой (проверять исходный текст в UTF-8).

Возможные ошибки и их решения

  • Ошибка "mPDF library is not compatible with PHP 8.x" - обновите mpdf до версии 8.1+.
  • Пустые страницы или отсутствие текста - проверьте, что HTML содержит разметку внутри <body>.
  • Медленная генерация - используйте режим fastCompression или кеширование.

Как создать PDF из текста с помощью библиотеки FPDF?

FPDF - классическая библиотека без зависимостей, проста в установке (скачать fpdf.php). Подходит для создания простых PDF из текста, но требует ручной работы с координатами.


<?php
require('fpdf.php');

$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial', 'B', 16);
$pdf->Cell(40, 10, 'Привет, мир!');
$pdf->Output('F', 'sample.pdf');
?>
Создается файл sample.pdf с текстом.

Проблема: FPDF не поддерживает UTF-8 «из коробки». Для кириллицы необходимо добавлять шрифты через AddFont() или использовать Unifont. Кодировку строки нужно преобразовывать в Windows-1251.

Как использовать TCPDF для создания PDF из текста?

TCPDF - более мощная библиотека, поддерживает UTF-8, разметку через HTML, но требует больше ресурсов. Установка: composer require tecnickcom/tcpdf.


<?php
require 'vendor/autoload.php';

$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$pdf->AddPage();
$pdf->SetFont('dejavusans', '', 14);
$pdf->Write(0, 'Привет, мир! Текст из TCPDF.');
$pdf->Output('example.pdf', 'F');
?>

Ошибка "Undefined constant PDF_PAGE_ORIENTATION" - необходимо предварительно подключить конфигурационные файлы tcpdf_config.php. Также возможна путаница с версиями PHP - используйте TCPDF 6.6+ для PHP 8.

Как преобразовать HTML в PDF с помощью Dompdf?

Dompdf отлично справляется с HTML/CSS, но плохо поддерживает сложные таблицы и большие объемы данных. Установка: composer require dompdf/dompdf.


<?php
require 'vendor/autoload.php';

use Dompdf\Dompdf;

$dompdf = new Dompdf();
$dompdf->loadHtml('<h1>Заголовок</h1><p>Текст внутри PDF.</p>');
$dompdf->setPaper('A4', 'portrait');
$dompdf->render();
$dompdf->stream('document.pdf', array('Attachment' => 0));
?>

Типичная проблема: не отображаются изображения с относительными путями - используйте абсолютные URL или опцию 'isRemoteEnabled'. Для кириллицы может потребоваться подключение шрифтов через CSS.

Как создать PDF через командную строку с помощью wkhtmltopdf?

Это внешний инструмент, вызываемый из PHP через exec(). Идеален для сложной верстки с JavaScript.


<?php
$html = '<h1>Заголовок</h1>';
file_put_contents('temp.html', $html);
exec('wkhtmltopdf temp.html result.pdf 2>&1', $output, $return_var);
?>

Проблемы: wkhtmltopdf не всегда установлен на сервере, требует прав на запуск shell-команд, возможны проблемы с путями. Рекомендуется использовать абсолютный путь к исполняемому файлу.

Расширенные примеры создания PDF из текста

1. Многостраничный документ с колонтитулами (mpdf)

Пример

<?php
require 'vendor/autoload.php';

$mpdf = new \Mpdf\Mpdf([
    'margin_top' => 20,
    'margin_bottom' => 20,
]);

$html = '<h1>Глава 1</h1><p>Текст первой страницы...</p><pagebreak/><h1>Глава 2</h1><p>Текст второй страницы...</p>';
$mpdf->SetHeader('Мой заголовок||{PAGENO}');
$mpdf->SetFooter('|Номер страницы {PAGENO}|');
$mpdf->WriteHTML($html);
$mpdf->Output('multipage.pdf', 'F');
?>
Создается PDF из двух страниц с колонтитулами.

2. Таблица с данными и стилями (mpdf)

Пример

<?php
$mpdf = new \Mpdf\Mpdf();
$html = '
<style>
table { border-collapse: collapse; width: 100%; }
td, th { border: 1px solid black; padding: 8px; text-align: left; }
th { background-color: #f2f2f2; }
</style>
<table>
<thead><tr><th>ID</th><th>Имя</th></tr></thead>
<tbody>
<tr><td>1</td><td>Анна</td></tr>
<tr><td>2</td><td>Борис</td></tr>
</tbody>
</table>';
$mpdf->WriteHTML($html);
$mpdf->Output('table.pdf', 'F');
?>
PDF-документ с красивой таблицей.

3. Вставка изображения и QR-кода (mpdf)

Пример

<?php
$mpdf = new \Mpdf\Mpdf();
$html = '<h2>Сертификат</h2><img src="http://example.com/logo.png" width="100" /><br/>';
$html .= '<barcode code="https://example.com" type="QR" size="30" error="M" />';
$mpdf->WriteHTML($html);
$mpdf->Output('cert.pdf', 'F');
?>
PDF содержит логотип и QR-код.

4. Использование пользовательского шрифта для кириллицы (TCPDF)

Пример

<?php
require 'vendor/autoload.php';

$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$pdf->AddPage();
// Добавить шрифт DejaVu Sans (встроен в TCPDF)
$pdf->SetFont('dejavusans', '', 12);
$pdf->Write(0, 'Русский текст: Привет, мир!');
$pdf->Output('cyrillic.pdf', 'I');
?>
Текст отображается корректно благодаря шрифту DejaVu Sans.

5. Создание PDF из длинного текста с автопереносом (FPDF)

Пример

<?php
require('fpdf.php');

$pdf = new FPDF();
$pdf->AddPage();
$pdf->AddFont('DejaVu', '', 'DejaVuSans.php'); // предварительно загрузить
$pdf->SetFont('DejaVu', '', 12);
$longText = 'Очень длинный текст, который должен быть разбит на строки автоматически...';
$pdf->MultiCell(0, 10, $longText);
$pdf->Output('longtext.pdf', 'F');
?>
Текст переносится по ширине страницы.

6. Генерация PDF с динамическим содержимым из базы данных (mpdf)

Пример

<?php
require 'vendor/autoload.php';

$db = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
$stmt = $db->query('SELECT name, email FROM users');
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

$mpdf = new \Mpdf\Mpdf();
$html = '<h1>Список пользователей</h1><ul>';
foreach ($rows as $row) {
    $html .= '<li>' . $row['name'] . ' - ' . $row['email'] . '</li>';
}
$html .= '</ul>';
$mpdf->WriteHTML($html);
$mpdf->Output('users.pdf', 'F');
?>
PDF со списком пользователей из БД.

Создать PDF из текста в PHP - comments

En
Text php pdf (php)