phpdev.org Программисты Laravel, Yii2, Битрикс
  • Поддержка
  • Разработка
  • Кейсы
  • О компании
  • Блог
  • Контакты
  • Галерея
  • Клиентам
  • RU | EN
Главная
Блог
Немного про генерацию pdf
20.01.2022

Немного про генерацию pdf

Какую выбрать библиотеку при необходимости генерировать pdf? В поиске ответа на этот вопрос попробовали несколько библиотек для js и php, о чем и расскажем.


html2pdf.js

Начнем с простенькой библиотеки для JavaScript - html2pdf.js. Принцип работы прост: размещаем контент на странице, например в div с id=element-to-print, а затем запускаем генерацию
var element = document.getElementById('element-to-print');
html2pdf(element);
Но как и в любой другой библиотеке по генерации pdf она не любую верстку может конвертировать. Очень легко сломать генерацию при помощи стилей. Стиль который в моем случае ломал все был "height:100%;".
Cо стилями нужно аккуратно - любой, вроде бы самый обычный и стандартный, может все сломать (но при этом на flex не ругается, что удивительно). Есть еще один путь - создание скрина страницы и размещения его в pdf. PDF будет выглядеть как страница на сайте на 100%, независимо от верстки и языка на ней, но это картинка , а значит элементы на ней не кликабельны.

dompdf

Одна из самых популярных библиотек php - dompdf. Инструкция по установке https://github.com/dompdf/dompdf

Установка без композера

Если через composer по какой-то причине нельзя установить ее , то качаем релиз последний библиотеки данной https://github.com/dompdf/dompdf/releases , после надо подключить все связи , в библиотеке есть файл autoload.inc.php и там все связи прописаны , поэтому достаточно написать
require_once 'dompdf/autoload.inc.php';

use Dompdf\Dompdf;
И все , теперь можно создавать экземпляр класса.

Пример использования: 
$dompdf = new Dompdf();


$dompdf->loadHtml('index.html');

// Render the HTML as PDF
$dompdf->render();

// Output the generated PDF to Browser
$dompdf->stream();
Это стандартный пример который содержимое index.html превратит в PDF .

Важно: в любом файле который мы в PDF преобразуем нужно прописать стиль

body { font-family: DejaVu Sans}

Без этого шрифта все может плыть , а русские символы или любые другие кроме англ. не выведутся вообще.

Перед нами стояла задача: превратить страницу .php в pdf документ.
Пример выше работает для HTML , с php такой вариант не сработает, он не исполнит php скрипты, а просто возьмет содержимое файла .php . Чтобы php отработало как надо и вернуть HTML после его работы используется вот такая хитрость.
$dompdf = new Dompdf();


ob_start();
require("index.php");
$content = ob_get_clean();

$dompdf->loadHtml($content );

// Render the HTML as PDF
$dompdf->render();

// Output the generated PDF to Browser
$dompdf->stream();
Вот теперь php отработает на index.php и вернет заполненный HTML.

Но нужен был более сложный вариант: генерация HTML в index.php зависела еще и от GET параметров.

Решил данную проблему путем размещения скрипта генерации pdf внутри самого файла index.php
require_once 'dompdf/autoload.inc.php';


use Dompdf\Dompdf;

$dompdf = new Dompdf();

ob_start(); // проводим все необходимые манипуляции с контентом и записываем html в переменную $content
$content = ob_get_clean();

$dompdf->loadHtml($content);


// Render the HTML as PDF
$dompdf->render();

$dompdf->stream();

Несколько полезных настроек

Изменение ориентации страницы на альбомную
$dompdf->setPaper('A4', 'landscape');

Скачивание pdf файла без сохранения на сервере
$dompdf->stream();

Открытие pdf на странице без скачивания
$dompdf->loadHtml($content);


// Render the HTML as PDF
$dompdf->render();

$dompdf->stream($filename . ".pdf", array("Attachment" => 0));



Возврат к списку


КОНТАКТЫ

Также вы можете связаться с нами по этим контактам:

phpdev.org Программисты Laravel, Yii2, Битрикс
info@phpdev.org
+7 993 898-44-62
+375 44 503 4449
г. Минск, ул. Ольшевского, д. 22, пом. 20
Карта
© 2015 – 2023 PHPDev
Мы в соцсетях:
phpdev.org Программисты Laravel, Yii2, Битрикс
меню
Поддержка Разработка Кейсы О компании Блог Контакты Галерея Клиентам
RU | EN
Программисты Laravel, Yii2, Битрикс
BY +375
  • BY +375
  • RU +7
  • UA +380

Нажимая кнопку «Оставить заявку», Вы даёте согласие на обработку Персональных данных.

phpdev.org Программисты Laravel, Yii2, Битрикс
Спасибо! The application has been successfully sent. We will contact you shortly