Перейти к содержимому

PDF из веб-страницы: PDF API

POST /v1/browser/pdf открывает страницу или готовую разметку в headless Chromium и печатает её в PDF. Ответ — сам файл (application/pdf), а не ссылка. Формат запроса совместим с Browserless /pdf.

Окно терминала
curl -X POST "https://proxy.seyka.ru/v1/browser/pdf" \
-H "Authorization: Bearer $SEYKA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com",
"options": {
"format": "A4",
"printBackground": true,
"margin": {"top": "1cm", "right": "1cm", "bottom": "1cm", "left": "1cm"}
}
}' \
--output page.pdf

Тело — общие параметры страницы (url или html, ожидания, куки, заголовки) плюс объект options:

Параметр Тип По умолчанию Описание
format string Letter A0–A6, Letter, Legal, Tabloid, Ledger
landscape boolean false альбомная ориентация
scale number 1 масштаб, 0.1–2
printBackground boolean false печатать фоновые цвета и изображения
margin object — поля top, right, bottom, left в единицах CSS: "1cm", "10px", "0.5in"
pageRanges string все страницы для вывода, например "1-3" или "1,3,5"
width, height string — произвольный размер листа вместо format, например "8.5in"
preferCSSPageSize boolean false взять размер из CSS-правила @page
displayHeaderFooter boolean false печатать колонтитулы
headerTemplate, footerTemplate string — HTML колонтитулов

В шаблонах колонтитулов подставляются значения элементов с классами date, title, url, pageNumber и totalPages. Колонтитулы печатаются внутри полей, поэтому задайте margin.top и margin.bottom, а размер шрифта — явно в шаблоне:

{
"url": "https://example.com",
"options": {
"format": "A4",
"displayHeaderFooter": true,
"headerTemplate": "<div style='font-size:10px;width:100%;text-align:center'>Отчёт</div>",
"footerTemplate": "<div style='font-size:10px;width:100%;text-align:center'>Стр. <span class='pageNumber'></span> из <span class='totalPages'></span></div>",
"margin": {"top": "2cm", "bottom": "2cm"}
}
}

Передайте разметку в html вместо url — сервис отрендерит её и вернёт PDF:

const response = await fetch('https://proxy.seyka.ru/v1/browser/pdf', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SEYKA_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
html: '<html><body><h1>Отчёт</h1><p>Содержимое</p></body></html>',
options: { format: 'A4', printBackground: true },
}),
});
if (!response.ok) throw new Error((await response.json()).error);
await Bun.write('report.pdf', await response.arrayBuffer());

200 с телом application/pdf. Для запроса по url заголовки X-Response-Code, X-Response-Status и X-Response-URL сообщают код сайта и конечный адрес после редиректов. Ошибки загрузки — JSON с error, errorKind и code, см. ошибки Browser API.

Если нужен не файл, а текст из чужого PDF-документа, используйте Smart Scrape: он извлекает текстовый слой PDF по ссылке.

Каждый вызов оплачивается по цене PDF; кэша ответов нет (X-Cache: DISABLED). Цены — в таблице цен.