Примеры генерации 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