Примеры генерации HTML в PDF при помощи PHP
Если вам необходима конвертация HTML в PDF из приложений написанных на PHP, вы можете использовать наш веб-сервис. Для этого вам не придется устанавливать или загружать какие-либо библиотеки или компоненты, достаточно реализовать простой API.
Это простой и удобный способ создания PDF версий документов для отчетов, счетов-фактур, накладных, электронных билетов и т.п. Можно создать нужную HTML-страницу и использовать ее в качестве источника для создания файла PDF или изображения.
Наш сервис может считывать любые веб-страницы в интернет по передаваемоогу адресу и динамически генерировать HTML в PDF или файлы изображений. Сервис может обрабатывать достаточно сложные документы и макеты, в том числе ссылки на изображения, инструкции JavaScript, CSS.
Пример №1 - Конвертация HTML в PDF и сохранение файла на диск
$apikey = 'ВАШ_КЛЮЧ_API';
$value = '<title>Тест генерации PDF </title>Какой-то текст';
$result = file_get_contents("http://api.pdf4b.ru/pdf?apikey=" . urlencode($apikey) . "&value=" . urlencode($value));
file_put_contents('mypdf.pdf', $result);
Дополнительно смотрите список опций для генерации
PDF или
JPEG
Пример №2 - Генерация PDF на PHP-странице, и вывод PDF файла в броузере на скачивание
$apikey = 'ВАШ_КЛЮЧ_API';
$value = '<title>Тест генерации PDF </title>Какой-то текст';
$result = file_get_contents("http://api.pdf4b.ru/pdf?apikey=" . urlencode($apikey) . "&value=" . urlencode($value));
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));
header('Content-Disposition: attachment; filename=' . 'file-name.pdf' );
echo $result;
Дополнительно смотрите список опций для генерации
PDF или
JPEG
Пример №3 - Преобразованиe HTML в графический файл
Вы можете преобразовать непосредственно текст HTML в PDF напрямую используя PHP. HTML может иметь достаточно сложную структуру, может включать в себя ссылки на изображения и CSS.
$apikey = 'ВАШ_КЛЮЧ_API';
$result = file_get_contents("http://api.pdf4b.ru/jpg?apikey=" . urlencode($apikey) . "&value=" . urlencode($value));
file_put_contents('my_image.jpg', $result);
Дополнительно смотрите список опций для генерации
PDF или
JPEG
Пример №4 - Добавление предопределенных блоков header или footer при конвертации исходного HTML в PDF посредством PHP
Не забываете использовать urlencode() при отправке данных в API.
$apikey = 'ВАШ_КЛЮЧ_API';
$apikey = 'YOUR-API-KEY';
$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('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;
Дополнительно смотрите список опций для генерации
PDF или
JPEG
Пример №5 - Использование POST запросов для конвертации HTML в PDF посредством PHP
Для длинных строк HTML передаваемых в GET запросе может сработать ограничение на длину GET запроса. В этом случае необходимо использовать POST запросы.
$apikey = 'ВАШ_КЛЮЧ_API';
$value = '<title>Тест генерации PDF </title>Какой-то текст';
$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);
$result = file_get_contents('http://api.pdf4b.ru/pdf', false, $context);
file_put_contents('my-pdf.pdf', $result);
Дополнительно смотрите список опций для генерации
PDF или
JPEG
Example #6 - Генерация PDF через POST запрос к API с ипользованием подключенных блоков header или footer и различными параметрами в т.ч. с номерами страниц
Данный пример аналогичен примеру с GET запросом (см. пример №4) за исключением того, что применяется POST запрос
$apikey = 'ВАШ_КЛЮЧ_API';
$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);
$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) {
document.getElementById("myHeader").style.display = 'none';
}
if (vars['page'] == 3) {
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>
Дополнительно смотрите список опций для генерации
PDF или
JPEG