PHPackages                             phpsoftbox/pdf - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [PDF &amp; Document Generation](/categories/documents)
4. /
5. phpsoftbox/pdf

ActiveLibrary[PDF &amp; Document Generation](/categories/documents)

phpsoftbox/pdf
==============

PDF rendering component for the PhpSoftBox framework

03PHP

Since Jun 22Pushed 1mo agoCompare

[ Source](https://github.com/phpsoftbox/pdf)[ Packagist](https://packagist.org/packages/phpsoftbox/pdf)[ RSS](/packages/phpsoftbox-pdf/feed)WikiDiscussions master Synced 3w ago

READMEChangelogDependenciesVersions (1)Used By (0)

PhpSoftBox Pdf
==============

[](#phpsoftbox-pdf)

Компонент генерации PDF для PhpSoftBox.

Назначение
----------

[](#назначение)

- рендерить HTML в PDF через Chromium (Gotenberg);
- задавать точные размеры страницы (в т.ч. термоэтикетки);
- отделить движок рендера интерфейсом `PdfRendererInterface`;
- отдавать PDF и для просмотра в браузере (`inline`), и для скачивания (`attachment`).

Почему Gotenberg
----------------

[](#почему-gotenberg)

`Gotenberg` это HTTP-сервис, который использует Chromium для печати HTML в PDF.

Плюсы для нашего кейса:

- современный рендер CSS/HTML (включая `@page`, print-стили);
- точные размеры листа/этикетки, поля, масштаб;
- отдельный процесс/контейнер, не нагружает PHP-процесс браузерным runtime;
- хорошо масштабируется горизонтально под batch-задачи.

В пакете реализован адаптер:

- `PhpSoftBox\Pdf\Gotenberg\GotenbergHtmlPdfRenderer`
- endpoint по умолчанию: `/forms/chromium/convert/html`

Быстрый старт
-------------

[](#быстрый-старт)

```
use PhpSoftBox\Pdf\Gotenberg\GotenbergHtmlPdfRenderer;
use PhpSoftBox\Pdf\PdfMargins;
use PhpSoftBox\Pdf\PdfPageSize;
use PhpSoftBox\Pdf\PdfRenderOptions;
use PhpSoftBox\Pdf\PdfUnit;

$renderer = new GotenbergHtmlPdfRenderer(
    client: $client,
    requestFactory: $requestFactory,
    streamFactory: $streamFactory,
    baseUrl: 'http://gotenberg:3000',
);

$document = $renderer->renderHtml(
    html: 'Этикетка #1',
    options: new PdfRenderOptions(
        pageSize: new PdfPageSize(58, 40, PdfUnit::Mm),
        margins: PdfMargins::all(1, PdfUnit::Mm),
        printBackground: true,
    ),
);
```

Хелпер для этикеток:

```
$options = PdfRenderOptions::labelMm(58, 40, marginMm: 1);
```

Возврат PDF в HTTP-ответ
------------------------

[](#возврат-pdf-в-http-ответ)

Для этого есть `PdfHttpResponder`.

```
use PhpSoftBox\Pdf\Http\PdfHttpResponder;

$responder = new PdfHttpResponder($responseFactory, $streamFactory);

// Просмотр в браузере
$response = $responder->inline($document, 'label.pdf');

// Скачивание файла
$response = $responder->download($document, 'label.pdf');
```

Компонент сам выставляет:

- `Content-Type`;
- `Content-Length`;
- `Content-Disposition` (`inline` или `attachment`);
- `Cache-Control`.

Большие batch-задачи (1000+ страниц)
------------------------------------

[](#большие-batch-задачи-1000-страниц)

Рекомендуемая стратегия:

1. Генерировать PDF в фоне через очередь (`Queue`), не в HTTP-запросе.
2. Делить задание на чанки по страницам/этикеткам.
3. Сохранять каждый чанк как отдельный PDF в Storage.
4. По завершении формировать индекс/архив или выдавать ссылки на части.

Для разбиения по диапазонам страниц есть:

- `PdfChunkPlanner::split(totalPages, pagesPerChunk)`.

Пример:

```
use PhpSoftBox\Pdf\Batch\PdfChunkPlanner;

$chunks = PdfChunkPlanner::split(totalPages: 1200, pagesPerChunk: 250);
// 1-250, 251-500, 501-750, 751-1000, 1001-1200
```

Тестовые артефакты PDF
----------------------

[](#тестовые-артефакты-pdf)

В пакете предусмотрен каталог для артефактов интеграционных тестов:

- `local/tests/pdf`

Он уже настроен через `.gitignore`, поэтому бинарные PDF не попадут в git.

Чтобы включить сохранение артефактов в интеграционных тестах:

```
PDF_TEST_SAVE_ARTIFACTS=1 vendor/bin/phpunit
```

Рекомендации для термопечати
----------------------------

[](#рекомендации-для-термопечати)

- Всегда явно задавайте `PdfPageSize` и `PdfMargins`.
- Отключайте лишние отступы в CSS и используйте print-стили.
- Для пиксельной точности этикеток тестируйте шаблон на целевом принтере.

###  Health Score

20

—

LowBetter than 12% of packages

Maintenance61

Regular maintenance activity

Popularity3

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity11

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/0279d150240c97d210034878b0467462246dc14d29b5618157ff6a8be49a50e3?d=identicon)[inspector-who](/maintainers/inspector-who)

---

Top Contributors

[![inspector-who](https://avatars.githubusercontent.com/u/6973963?v=4)](https://github.com/inspector-who "inspector-who (1 commits)")

### Embed Badge

![Health badge](/badges/phpsoftbox-pdf/health.svg)

```
[![Health](https://phpackages.com/badges/phpsoftbox-pdf/health.svg)](https://phpackages.com/packages/phpsoftbox-pdf)
```

###  Alternatives

[tarfin-labs/easy-pdf

Makes pdf processing easy.

1719.9k](/packages/tarfin-labs-easy-pdf)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
