Skip to content

Почему PHP 8.5+?

TCPDF-Next требует PHP 8.5+ по замыслу. Это не произвольное ограничение — каждая современная возможность PHP, используемая в библиотеке, напрямую улучшает качество кода, безопасность и опыт разработчика.

Используемые возможности PHP 8.5

ВозможностьПреимущество для TCPDF-Next
Readonly classesНеизменяемые value objects (PageSize, Margin, Color, FontInfo) — исключены ошибки мутации
Backed enumsТипобезопасная конфигурация (Orientation::Portrait, BarcodeType::QRCode, SignatureLevel::PAdES_B_LTA)
Именованные аргументыСамодокументирующиеся вызовы API — setSignature(certInfo: $cert, level: SignatureLevel::PAdES_B_B)
Union/intersection typesТочные типы параметров по всему API
DNF typesСложные ограничения типов для внутренней валидации
#[\SensitiveParameter]Пароли и приватные ключи никогда не появляются в стек-трейсах (Aes256Encryptor, CertificateInfo, TsaClient)
#[\NoDiscard]Предупреждения компилятора при игнорировании возвращаемых значений критических методов (FontManager::registerFont(), FormFlattener::flatten())
Property hooksЧистые паттерны getter/setter без шаблонного кода
Pipe operatorУпрощённые внутренние трансформации данных
FibersОснова для асинхронной генерации PDF в воркерах очередей

"Но мой сервер работает на PHP 8.1..."

Используйте Docker как изоляционный слой. Ваше приложение может работать на любой версии PHP — TCPDF-Next работает внутри контейнера.

Минимальный Dockerfile

dockerfile
FROM php:8.5-cli

# Install required extensions
RUN apt-get update && apt-get install -y \
    libicu-dev libpng-dev libjpeg-dev libwebp-dev \
    && docker-php-ext-configure gd --with-jpeg --with-webp \
    && docker-php-ext-install gd intl

# Install Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

COPY . /app
WORKDIR /app
RUN composer install --no-dev --optimize-autoloader

Docker Compose для команд

yaml
services:
  pdf-generator:
    build: .
    volumes:
      - ./output:/app/output
    command: php generate-pdf.php

Laravel с Docker

Если ваше Laravel-приложение работает на PHP 8.2, но вам нужен TCPDF-Next, запускайте генерацию PDF как микросервис:

yaml
services:
  app:
    image: php:8.2-fpm
    # Your Laravel app

  pdf-service:
    build:
      context: ./pdf-service
      dockerfile: Dockerfile
    image: php:8.5-cli
    volumes:
      - shared-output:/output

volumes:
  shared-output:

Или используйте систему очередей Laravel для отправки генерации PDF на воркер PHP 8.5.

🐳 Docker for Legacy PHP Environments
Docker — рекомендуемый подход для команд, которые не могут обновить версию PHP в продакшене. Процесс генерации PDF изолирован — он читает входные данные, записывает PDF-файл и завершается. Без общего состояния, без проблем совместимости.

Компромисс

Требуя PHP 8.5+, TCPDF-Next получает:

  • Меньшую кодовую базу — Современные возможности заменяют сотни строк обходных решений
  • Более сильную типобезопасность — PHPStan Level 10 с нулём ошибок
  • Лучшую безопасность#[\SensitiveParameter] предотвращает утечку учётных данных в логах
  • Неизменяемые объекты — Readonly classes устраняют целую категорию ошибок
  • Самодокументирующийся код — Enums заменяют магические строки, именованные аргументы заменяют позиционные массивы

Библиотека, которая будет служить вам следующее десятилетие, должна быть построена на возможностях языка следующего десятилетия.

Распространяется по лицензии LGPL-3.0-or-later.