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

Настройка пакета NextPDF для Symfony

Поведение пакета настраивается в файле config/packages/nextpdf.yaml через корневой ключ nextpdf. Для каждого ключа задано значение по умолчанию, поэтому достаточно указывать только значения, которые вы хотите изменить. Эта страница в точности отражает Configuration.php.

NextPDF\Symfony\DependencyInjection\Configuration описывает схему. Недопустимые значения вызывают ошибку на этапе сборки контейнера: Symfony выбрасывает исключение InvalidConfigurationException.

КлючТипПо умолчаниюВалидация
page_formatenumA4одно из A4, A3, A5, Letter, Legal, Tabloid
orientationenumPодно из P, L
unitenummmодно из pt, mm, cm, in
pdfaскаляр (scalar)nullодно из null, 4, 4e, 4f
fonts_pathскаляр (scalar)%kernel.project_dir%/resources/fonts
cache_pathскаляр (scalar)%kernel.cache_dir%/nextpdf
image_cache_mbцелое число (integer)50минимум 0
font_cache_lockingbooleantrue
preload_fontsсписок строк[]
КлючТипПо умолчанию
icc_profile.rgbскаляр (scalar)null
icc_profile.cmykскаляр (scalar)null

Применяется ко всем документам, которые создаёт PdfFactory.

КлючТипПо умолчанию
defaults.creatorскаляр (scalar)NextPDF
defaults.authorскаляр (scalar)(пусто)
defaults.languageскаляр (scalar)en
defaults.margin_topfloat10.0
defaults.margin_rightfloat10.0
defaults.margin_bottomfloat10.0
defaults.margin_leftfloat10.0
defaults.font_familyскаляр (scalar)dejavusans
defaults.font_sizefloat12.0
defaults.trim_boxпеременная (variable)null
defaults.bleed_boxпеременная (variable)null

PdfFactory считывает creator, author и language из этого раздела и применяет их к каждому новому документу. Остальные ключи пакет сохраняет в параметрах контейнера для использования движком.

Применяется только если nextpdf/artisan установлен и обнаружен.

КлючТипПо умолчанию
artisan.chrome_binaryскаляр (scalar)null
artisan.render_timeoutцелое число (integer)30
artisan.default_cssскаляр (scalar)(пусто)
artisan.no_sandboxbooleanfalse
artisan.max_html_sizeцелое число (integer)5000000

Применяется только если установлен nextpdf/premium. Если пакет присутствует и доступен уровень Pro, поддерживается конфигурация подписи профиля baseline B-B. Узел level принимает приведённые ниже строковые значения, чтобы схема оставалась совместимой с более широким семейством конфигураций NextPDF. Этот пакет предоставляет подпись уровня B-B. Профили выше B-B описаны отдельно в документации NextPDF Premium и здесь не заявлены.

КлючТипПо умолчаниюВалидация
signature.enabledbooleanfalse
signature.certificateскаляр (scalar)null
signature.private_keyскаляр (scalar)null
signature.passwordскаляр (scalar)(пусто)
signature.extra_certsсписок строк[]
signature.levelenumB-Bдопустимый набор: B-B, B-T, B-LT, B-LTA (B-B предоставляется; B-T/B-LT/B-LTA — значения для совместимости схемы, а не предоставляемая возможность Pro)

Проход компилятора регистрирует сервис подписи только тогда, когда signature.enabled равен true и задан signature.certificate; в противном случае раздел остаётся неактивным.

Конфигурация клиента службы меток времени (TSA), которую использует подпись Pro при наличии настройки.

КлючТипПо умолчанию
tsa.urlскаляр (scalar)null
tsa.usernameскаляр (scalar)(пусто)
tsa.passwordскаляр (scalar)(пусто)
tsa.certскаляр (scalar)null
tsa.keyскаляр (scalar)null
tsa.timeoutцелое число (integer)30
tsa.allow_insecure_httpbooleanfalse
tsa.pinned_public_keysсписок строк[]
tsa.warn_on_key_rotationbooleantrue

Пакет регистрирует сервис клиента TSA только тогда, когда задан tsa.url.

КлючТипПо умолчанию
ocsp_cache.enabledbooleantrue
ocsp_cache.ttlцелое число (integer)86400
ocsp_cache.directoryскаляр (scalar)null

Настройки асинхронной генерации, которые применяются, если установлен symfony/messenger.

КлючТипПо умолчанию
messenger.transportскаляр (scalar)async
messenger.timeoutцелое число (integer)120
messenger.retriesцелое число (integer)3

Файл конфигурации, показывающий каждый раздел с его значениями по умолчанию:

nextpdf:
page_format: A4
orientation: P
unit: mm
pdfa: ~
fonts_path: '%kernel.project_dir%/resources/fonts'
cache_path: '%kernel.cache_dir%/nextpdf'
image_cache_mb: 50
font_cache_locking: true
preload_fonts: []
icc_profile:
rgb: ~
cmyk: ~
defaults:
creator: NextPDF
author: ''
language: en
margin_top: 10.0
margin_right: 10.0
margin_bottom: 10.0
margin_left: 10.0
font_family: dejavusans
font_size: 12.0
trim_box: ~
bleed_box: ~
artisan:
chrome_binary: ~
render_timeout: 30
default_css: ''
no_sandbox: false
max_html_size: 5000000
signature:
enabled: false
certificate: ~
private_key: ~
password: ''
extra_certs: []
level: B-B
tsa:
url: ~
username: ''
password: ''
cert: ~
key: ~
timeout: 30
allow_insecure_http: false
pinned_public_keys: []
warn_on_key_rotation: true
ocsp_cache:
enabled: true
ttl: 86400
directory: ~
messenger:
transport: async
timeout: 120
retries: 3

Пакет загружает определения своих сервисов из config/services.php. Таблица ниже точно соответствует этому файлу.

Идентификатор сервисаРазделяемыйПубличныйПримечания
NextPDF\Typography\FontRegistryдасоздаётся на основе nextpdf.fonts_path; необязательный логгер PHP Standard Recommendation 3 (PSR-3)
NextPDF\Contracts\FontRegistryInterface(псевдоним)дапсевдоним FontRegistry
NextPDF\Graphics\ImageRegistryдаограниченный кэш с вытеснением наименее недавно использованных элементов (LRU); помечен тегом kernel.reset (reset)
NextPDF\Core\DocumentFactoryдаиспользует оба реестра совместно
NextPDF\Contracts\DocumentFactoryInterface(псевдоним)дапсевдоним DocumentFactory
NextPDF\Symfony\Service\PdfFactoryдадасчитывает defaults, pdfa и artisan из параметров
NextPDF\Contracts\PdfDocumentInterfaceнетдафабрика [PdfFactory, create]
NextPDF\Core\Document(псевдоним)псевдоним PdfDocumentInterface
nextpdf.document(псевдоним)дапсевдоним PdfDocumentInterface
NextPDF\Symfony\Http\PdfResponseдахелпер без состояния

Пакет также регистрирует привязки контрактов EInvoice (EmbedderInterface, ValidatorInterface, ProfileInterface, SchematronRunnerInterface) только если существуют соответствующие классы реализации Premium. Каждый такой сервис неразделяемый, поэтому вызывающий код получает новый экземпляр. Состояние парсера отдельного вызова никогда не переносится между запросами.

nextpdf.document (и его псевдонимы) является неразделяемым: при каждом разрешении контейнер возвращает отдельный документ. Согласно PHP Standard Recommendation 11 (PSR-11), контейнер может возвращать разные значения при последовательных вызовах get() с одним и тем же идентификатором; см. PSR-11 §1.1.2. Реестр шрифтов является разделяемым и блокируется после прогрева. Структурные данные шрифта разбираются один раз за процесс и не могут быть изменены в середине запроса.

Сервисы FontRegistry и ImageRegistry принимают необязательный Psr\Log\LoggerInterface; Symfony связывает его с помощью nullOnInvalid(). Логгер остаётся необязательным участником взаимодействия, который можно заменить в соответствии с контрактом логгера PSR-3.

PdfFactory, PdfResponse, интерфейс фабрики документов и интерфейс реестра шрифтов являются публичными. Их можно получить из контейнера или указать в типизированных параметрах контроллеров и сервисов с автоматическим связыванием. Рекомендуемая точка входа — внедрение NextPDF\Symfony\Service\PdfFactory через конструктор.

  • pdfa задан без Pro — значение сохраняется, но игнорируется. PdfFactory применяет Portable Document Format/Archival (PDF/A) только тогда, когда расширение Pro обнаружено на этапе компиляции.
  • image_cache_mb: 0 — допустимо; отключает LRU-кэш изображений. Отрицательные значения отклоняются на этапе сборки.
  • signature.enabled: true без signature.certificate — сервис подписи не регистрируется; конфигурация по замыслу остаётся неактивной без сообщения.
  • Подстановки %kernel.*% — значения по умолчанию fonts_path и cache_path используют параметры контейнера Symfony; переопределяйте их абсолютными путями только тогда, когда нужен буквальный путь.

Каждая строка в этой таблице — нормативное утверждение на этой странице, связанное с полным 64-символьным шестнадцатеричным reference_id из закрытого корпуса организации по разработке стандартов (SDO). Происхождение, включая манифест корпуса и механизм извлечения, указано в _sidecars/rag-citations.yaml.

СпецификацияПунктИдентификатор ссылки (reference_id)Утверждение
PSR-11psr_11_container#1.1.2.p3.bget() может возвращать разные значения при каждом разрешении
PSR-3psr_3_logger#x3.p17Необязательный участник взаимодействия LoggerInterface

Разделы signature и tsa применяются только тогда, когда установлен nextpdf/premium (Pro). Эта необязательная возможность Pro не требует изменений кода в описанном здесь пакете Core. См. </get-license/?intent=symfony-pro>.

  • /integrations/symfony/install/ — установка и регистрация пакета.
  • /integrations/symfony/overview/ — сводный обзор возможностей.
  • /integrations/symfony/production-usage/ — безопасность воркеров и асинхронные паттерны.
  • /integrations/symfony/boot-and-discovery/ — как конфигурация разрешается во время загрузки.