Примеры генерации HTML в PDF при помощи PHP

Если вам необходима конвертация HTML в PDF из приложений написанных на PHP, вы можете использовать наш веб-сервис. Для этого вам не придется устанавливать или загружать какие-либо библиотеки или компоненты, достаточно реализовать простой API.
Это простой и удобный способ создания PDF версий документов для отчетов, счетов-фактур, накладных, электронных билетов и т.п. Можно создать нужную HTML-страницу и использовать ее в качестве источника для создания файла PDF или изображения.
Наш сервис может считывать любые веб-страницы в интернет по передаваемоогу адресу и динамически генерировать HTML в PDF или файлы изображений. Сервис может обрабатывать достаточно сложные документы и макеты, в том числе ссылки на изображения, инструкции JavaScript, CSS.

Пример №1 - Конвертация HTML в PDF и сохранение файла на диск

//Параметры
$apikey = 'ВАШ_КЛЮЧ_API'; //получить можно тут: http://www.pdf4b.ru/register
$value = '<title>Тест генерации PDF </title>Какой-то текст'; //может быть HTML или URL, начинающийся с http://...

//Преобразование HTML в PDF с использованием параметров.
//Внимание, если вы используете очень большой HTML, используйте POST запросы (см. пример №5)
$result = file_get_contents("http://api.pdf4b.ru/pdf?apikey=" . urlencode($apikey) . "&value=" . urlencode($value));

//Сохраняем полученный файл на диск
file_put_contents('mypdf.pdf', $result);

Пример №2 - Генерация PDF на PHP-странице, и вывод PDF файла в броузере на скачивание

//Параметры
$apikey = 'ВАШ_КЛЮЧ_API'; //получить можно тут: http://www.pdf4b.ru/register
$value = '<title>Тест генерации PDF </title>Какой-то текст'; //может быть HTML или URL, начинающийся с http://...

//Преобразование HTML в PDF с использованием параметров.
//Внимание, если вы используете очень большой HTML, используйте POST запросы (см. пример №5)
$result = file_get_contents("http://api.pdf4b.ru/pdf?apikey=" . urlencode($apikey) . "&value=" . urlencode($value));
 
//Помните, любые вызовы header() должны производиться до любых отправок данных в output
header('Content-Description: File Transfer');
header('Content-Type: application/pdf');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . strlen($result));
 
//Созданный файл можно сохранить в броузере
//Вы можете указать любое удобное имя файла, например file-name.pdf
header('Content-Disposition: attachment; filename=' . 'file-name.pdf' );
 
//Вывод PDF пользователю
echo $result;

Пример №3 - Преобразованиe HTML в графический файл

Вы можете преобразовать непосредственно текст HTML в PDF напрямую используя PHP. HTML может иметь достаточно сложную структуру, может включать в себя ссылки на изображения и CSS.
//Параметры
$apikey = 'ВАШ_КЛЮЧ_API'; //получить можно тут: http://www.pdf4b.ru/register
$value = 'http://www.yandex.ru'; //вместо URL может быть HTML, например "<h1>Какой-то <strong>Текст</strong>Заголовок</h1>..."

//Преобразование HTML в PDF с использованием параметров.
//Внимание, если вы используете очень большой HTML, используйте POST запросы (см. пример №5)
$result = file_get_contents("http://api.pdf4b.ru/jpg?apikey=" . urlencode($apikey) . "&value=" . urlencode($value));
 
//Сохраняем файл изображения на сервере
file_put_contents('my_image.jpg', $result);

Пример №4 - Добавление предопределенных блоков header или footer при конвертации исходного HTML в PDF посредством PHP

Не забываете использовать urlencode() при отправке данных в API.
//Параметры
$apikey = 'ВАШ_КЛЮЧ_API'; //получить можно тут: http://www.pdf4b.ru/register
// Set parameters
$apikey = 'YOUR-API-KEY';
$value = 'http://www.yandex.ru'; //вместо URL может быть HTML, например "<h1>Какой-то <strong>Текст</strong>Заголовок</h1>..."
 
// Обратите внимание на то, что все значения margin по умолчанию равны нулю (0px).
// Вы можете установить нужные вам параметры через MarginTop, MarginBottom и пр.
$result = file_get_contents("http://api.pdf4b.ru/pdf?apikey=" . urlencode($apikey) . "&value=" . urlencode($value) . "&MarginBottom=30&FooterUrl=" . urlencode("http://your-site.ru/footer.htm"));

//Помните, любые вызовы header() должны производиться до любых отправок данных в output
header('Content-Description: File Transfer');
header('Content-Type: application/pdf');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . strlen($result));

//Вывод в броузер
echo $result;

Пример №5 - Использование POST запросов для конвертации HTML в PDF посредством PHP

Для длинных строк HTML передаваемых в GET запросе может сработать ограничение на длину GET запроса. В этом случае необходимо использовать POST запросы.
//Параметры
$apikey = 'ВАШ_КЛЮЧ_API'; //получить можно тут: http://www.pdf4b.ru/register
$value = '<title>Тест генерации PDF </title>Какой-то текст'; //может быть HTML или URL, начинающийся с http://...
                                            
$postdata = http_build_query(
    array(
        'apikey' => $apikey,
        'value' => $value,
        'MarginBottom' => '30',
        'MarginTop' => '20'
    )
);
 
$opts = array('http' =>
    array(
        'method'  => 'POST',
        'header'  => 'Content-type: application/x-www-form-urlencoded',
        'content' => $postdata
    )
);
 
$context  = stream_context_create($opts);
 
//Преобразовываем HTML в PDF посредством отправки данных методом POST в API с параметрами
$result = file_get_contents('http://api.pdf4b.ru/pdf', false, $context);
 
//Сохраняем полученный файл на сервере
file_put_contents('my-pdf.pdf', $result);

Example #6 - Генерация PDF через POST запрос к API с ипользованием подключенных блоков header или footer и различными параметрами в т.ч. с номерами страниц

Данный пример аналогичен примеру с GET запросом (см. пример №4) за исключением того, что применяется POST запрос
//Параметры
$apikey = 'ВАШ_КЛЮЧ_API'; //получить можно тут: http://www.pdf4b.ru/register
$value = 'http://www.yandex.ru'; //вместо URL может быть HTML, например "<h1>Какой-то <strong>Текст</strong>Заголовок</h1>..."
 
//Убедитесь, что ваши поля (Margin) достаточно велики, чтобы header поместился целиком                                          
$postdata = http_build_query(
    array(
        'apikey' => $apikey,
        'value' => $value,
        'MarginBottom' => '30',
        'MarginTop' => '10',
        'HeaderUrl' => 'http://your-site.ru/header.html'
    )
);
 
$opts = array('http' =>
    array(
        'method'  => 'POST',
        'header'  => 'Content-type: application/x-www-form-urlencoded',
        'content' => $postdata
    )
);
 
$context  = stream_context_create($opts);
 
//Преобразовываем HTML в PDF посредством отправки данных методом POST в API с параметрами
$result = file_get_contents('http://api.pdf4b.ru/pdf', false, $context);
 
//Сохраняем полученный файл на сервере
file_put_contents('my-pdf.pdf', $result);
Данный пример отправки HTTP заголовков с для генерации PDF c номерами страниц. Не забывайте о теге DOCTYPE.
<!DOCTYPE html>
<html>
<head>
    <script>
        function subst() {
            var vars = {};
            var x = window.location.search.substring(1).split('&');
            for (var i in x) { var z = x[i].split('=', 2); vars[z[0]] = unescape(z[1]); }
            var x = ['frompage', 'topage', 'page', 'webpage', 'section', 'subsection', 'subsubsection'];
            for (var i in x) {
                var y = document.getElementsByClassName(x[i]);
                for (var j = 0; j < y.length; ++j) y[j].textContent = vars[x[i]];
            }
        }
    </script>
</head>
    <body style="border:0; margin: 0;" onload="subst()">
        <table style="border-bottom: 1px solid black; width: 100%">
            <tr>
                <td class="section"></td>
                <td style="text-align:right">
                    Page <span class="page"></span> of <span class="topage"></span>
                </td>
            </tr>
        </table>
    </body>
</html>
Этот пример отменяет печать блоков header на определенных страницах с номерами 1 и 3
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <script>
        function subst() {
            var vars = {};
            var x = document.location.search.substring(1).split('&');
            for (var i in x) { var z = x[i].split('=', 2); vars[z[0]] = unescape(z[1]); }
            var x = ['frompage', 'topage', 'page', 'webpage', 'section', 'subsection', 'subsubsection'];
            for (var i in x) {
                var y = document.getElementsByClassName(x[i]);
                for (var j = 0; j < y.length; ++j) y[j].textContent = vars[x[i]];
                if (vars['page'] == 1) { //Если текущая страница 1, скрываем myHeader
                    document.getElementById("myHeader").style.display = 'none';
                }
                if (vars['page'] == 3) { //Если текущая страница 3, скрываем myHeader
                    document.getElementById("myHeader").style.display = 'none';
                }
            }
        }
    </script>
</head>
<body style="border:0;margin:0;" onload="subst()">
     <table style="border-bottom: 1px solid green; width: 100%; margin-bottom:5px;" id="myHeader">
         <tr>
             <th>Некоторый текст</th>
             Page <span class="page"></span>/<span class="topage"></span>
             </th>
        </tr>
    </table>
</body>
</html>
Поделитесь с коллегами:
 

Не тратьте свое время! Подключайтесь к API прямо сейчас!

Генерация ключа занимает меньше минуты. Ключ будет мгновенно выслан вам на почту.