Przejdź do głównej zawartości

Konfiguracja pakietu NextPDF dla Laravel

config/nextpdf.php publikuje się za pomocą polecenia php artisan vendor:publish --tag=nextpdf-config. Każdy klucz ma odpowiadającą mu zmienną środowiskową oraz zakodowaną na stałe wartość domyślną. Na tej stronie wymieniono wszystkie klucze w postaci, w jakiej występują w pakietowym pliku config/nextpdf.php.

Okno terminala
php artisan vendor:publish --tag=nextpdf-config

Podczas register() dostawca scala również domyślne ustawienia pakietu pod kluczem konfiguracji nextpdf. Nieustawione klucze przyjmują wtedy wartości podane poniżej, jeszcze przed opublikowaniem pliku konfiguracyjnego.

Większość zmiennych środowiskowych używa nazwy w formacie NEXTPDF_* albo starszej nazwy TCPDF_*. Starszy prefiks jest dostępny w okresie przejściowym opisanym w pliku UPGRADE.md. W nowych wdrożeniach używaj NEXTPDF_*. Plik konfiguracyjny ustala wartości w tej kolejności: zmienna środowiskowa → wartość z opublikowanego pliku → wartość domyślna pakietu.

KluczZmienna środowiskowa (podstawowa)Domyślna wartośćEfekt
page_formatNEXTPDF_PAGE_FORMATA4Domyślny format strony: A4, A3, A5, Letter, Legal lub Tabloid
orientationNEXTPDF_ORIENTATIONPPionowa (P) lub pozioma (L)
unitNEXTPDF_UNITmmJednostka miary: pt, mm, cm lub in
defaults.creatorNEXTPDF_CREATORNextPDFMetadane twórcy dokumentu; stosowane przy wiązaniu PdfDocumentInterface
defaults.authorNEXTPDF_AUTHOR(puste)Metadane autora; stosowane tylko wtedy, gdy wartość jest niepusta
defaults.languageNEXTPDF_LANGenJęzyk dokumentu; stosowany przy wiązaniu dokumentu
defaults.margin_top / _right / _bottom / _left10Domyślne marginesy
defaults.font_familydejavusansDomyślna rodzina czcionek
defaults.font_size12Domyślny rozmiar czcionki
defaults.trim_boxnullTrimBox [left, bottom, right, top] w punktach albo null
defaults.bleed_boxnullBleedBox [left, bottom, right, top] w punktach albo null

Dostawca stosuje defaults.creator, defaults.language oraz (gdy ustawiono) defaults.author w każdym nowo rozwiązywanym dokumencie. Pomija defaults.author, gdy wartość jest pusta.

KluczZmienna środowiskowa (podstawowa)Domyślna wartośćEfekt
pdfaNEXTPDF_PDFAnullPoziom archiwizacji PDF/A: null, 4, 4e lub 4f. Wartość inna niż null włącza PDF/A dla wiązania dokumentu i wymaga nextpdf/premium
fonts_pathNEXTPDF_FONTS_PATHresource_path('fonts')Katalog dodatkowych czcionek TrueType; ustawia ścieżkę wyszukiwania rejestru czcionek
cache_pathNEXTPDF_CACHE_PATHstorage_path('framework/cache/tcpdf')Katalog pamięci podręcznej przetworzonych czcionek i plików tymczasowych
icc_profile.rgbNEXTPDF_ICC_PROFILE_RGBnullŚcieżka profilu ICC RGB; wymagana dla PDF/A
icc_profile.cmykNEXTPDF_ICC_PROFILE_CMYKnullOpcjonalny profil ICC CMYK do procesów druku
font_cache_lockingNEXTPDF_FONT_CACHE_LOCKINGtrueUżywa flock dla pamięci podręcznej czcionek, aby zapobiec jej uszkodzeniu przy jednoczesnym zapisie przez procesy robocze kolejki

Wartość pdfa inna niż null wymaga edycji Premium. Bez nextpdf/premium próba rozwiązania wiązania dokumentu z ustawionym pdfa zgłasza błąd „klasa nie znaleziona” dla typu wersji PDF/A. Ta strona nie opisuje zachowania archiwizacji w edycji Premium. Zobacz dokumentację edycji Premium.

Pamięć procesów roboczych (długo działające środowiska wykonawcze)

Dział zatytułowany „Pamięć procesów roboczych (długo działające środowiska wykonawcze)”
KluczZmienna środowiskowa (podstawowa)Domyślna wartośćEfekt
preload_fonts[]Bezwzględne ścieżki plików czcionek przetwarzane przy starcie procesu roboczego. Rejestr czcionek zostaje zablokowany po wstępnym przygotowaniu
image_cache_mbNEXTPDF_IMAGE_CACHE_MB50Budżet pamięci podręcznej obrazów działającej według algorytmu „najdawniej używane” (LRU), w megabajtach (MB). 0 wyłącza buforowanie. Dostawca nie wymusza żadnego ograniczenia górnego

Dostawca nie wymusza górnego ograniczenia budżetu pamięci podręcznej obrazów. Aby go ograniczyć, użyj limitu pamięci kontenera lub php.inimemory_limit. Plik konfiguracyjny zaleca praktyczne maksimum 256 MB.

KluczZmienna środowiskowa (podstawowa)Domyślna wartośćEfekt
signature.enabledNEXTPDF_SIGN_ENABLEDfalseGdy false lub gdy certyfikat jest pusty, SignerInterface rozwiązuje się do null
signature.certificateNEXTPDF_SIGN_CERTnullŚcieżka certyfikatu podpisującego
signature.private_keyNEXTPDF_SIGN_KEYnullŚcieżka klucza prywatnego
signature.passwordNEXTPDF_SIGN_PASSWORD(puste)Hasło klucza
signature.extra_certs[]Ścieżki certyfikatów pośrednich urzędów certyfikacji
signature.levelNEXTPDF_SIGN_LEVELB-BPoziom bazowy zaawansowanych podpisów elektronicznych PDF (PAdES) przekazywany do podpisującego

Pakiet Core opisany na tej stronie nie dostarcza implementacji podpisującego; SignerInterface rozwiązuje się do null, dopóki nie dostarczy jej nextpdf/premium. W edycji Premium level: B-B tworzy podpis bazowy PAdES B-B. Wyższe poziomy bazowe PAdES zależą od skonfigurowanego urzędu znacznika czasu oraz możliwości dostępnych w edycji Premium; ta strona nie opisuje tych poziomów.

KluczZmienna środowiskowa (podstawowa)Domyślna wartośćEfekt
tsa.urlNEXTPDF_TSA_URLnullPunkt końcowy urzędu znacznika czasu (TSA). Gdy jest pusty, TsaClient rozwiązuje się do null
tsa.username / tsa.passwordNEXTPDF_TSA_USERNAME / _PASSWORD(puste)Poświadczenia HTTP do TSA
tsa.cert / tsa.keyNEXTPDF_TSA_CERT / _KEYnullCertyfikat / klucz klienta na potrzeby wzajemnego uwierzytelniania TLS (mTLS) z TSA
tsa.timeoutNEXTPDF_TSA_TIMEOUT30Limit czasu HTTP w sekundach dla klienta PSR-18
tsa.pinned_public_keys[]Przypięcia Base64 SHA-256 dla SubjectPublicKeyInfo (SPKI) (RFC 7469). Pusta wartość wyłącza przypinanie
tsa.warn_on_key_rotationNEXTPDF_TSA_WARN_ROTATIONtrueEmituje ostrzeżenie, gdy TSA przedstawia nieprzypięte SPKI
tsa.allow_insecure_httpNEXTPDF_TSA_ALLOW_INSECURE_HTTPfalseZezwala na nieszyfrowany ruch HTTP do TSA. W środowisku produkcyjnym pozostaw false
KluczZmienna środowiskowa (podstawowa)Domyślna wartośćEfekt
ocsp_cache.enabledNEXTPDF_OCSP_CACHE_ENABLEDtrueBuforuje odpowiedzi protokołu sprawdzania stanu certyfikatu online (OCSP) podczas walidacji
ocsp_cache.ttlNEXTPDF_OCSP_CACHE_TTL86400Czas życia pamięci podręcznej (TTL) w sekundach
ocsp_cache.directoryNEXTPDF_OCSP_CACHE_DIRnullKatalog pamięci podręcznej; null oznacza przechowywanie pamięci podręcznej wyłącznie w pamięci
KluczZmienna środowiskowa (podstawowa)Domyślna wartośćEfekt
queue.connectionNEXTPDF_QUEUE_CONNECTIONnullPołączenie kolejki; null oznacza użycie połączenia domyślnego
queue.queueNEXTPDF_QUEUE_NAMEpdfKolejka, do której trafia GeneratePdfJob
queue.timeoutNEXTPDF_QUEUE_TIMEOUT120Limit czasu pojedynczego zadania w sekundach
KluczZmienna środowiskowa (podstawowa)Domyślna wartośćEfekt
artisan.chrome_binaryNEXTPDF_ARTISAN_CHROME_BINARYwartość ze środowiska lub brak ustawieniaŚcieżka do pliku binarnego Chrome/Chromium
artisan.render_timeoutNEXTPDF_ARTISAN_RENDER_TIMEOUT30Limit czasu renderowania w sekundach
artisan.default_cssNEXTPDF_ARTISAN_DEFAULT_CSS(puste)Domyślny CSS wstrzykiwany do renderowanego kodu HTML
artisan.no_sandboxNEXTPDF_ARTISAN_NO_SANDBOXfalseWyłącza piaskownicę Chrome
artisan.max_html_sizeNEXTPDF_ARTISAN_MAX_HTML_SIZE5000000Maksymalny rozmiar wejściowego kodu HTML w bajtach

Sekcja artisan ma wpływ na wiązanie dokumentu tylko wtedy, gdy dostępna jest klasa fabryki przeglądarki Chrome (rozszerzenie nextpdf/artisan). Jeśli tej klasy nie ma, sekcja jest ignorowana.

resource: config/nextpdf.php (subset, verified against the published file)
<?php
declare(strict_types=1);
return [
'page_format' => env('NEXTPDF_PAGE_FORMAT', 'A4'),
'orientation' => env('NEXTPDF_ORIENTATION', 'P'),
'unit' => env('NEXTPDF_UNIT', 'mm'),
'pdfa' => env('NEXTPDF_PDFA', null),
'fonts_path' => env('NEXTPDF_FONTS_PATH', resource_path('fonts')),
'preload_fonts' => [],
'image_cache_mb' => env('NEXTPDF_IMAGE_CACHE_MB', 50),
'queue' => [
'connection' => env('NEXTPDF_QUEUE_CONNECTION', null),
'queue' => env('NEXTPDF_QUEUE_NAME', 'pdf'),
'timeout' => env('NEXTPDF_QUEUE_TIMEOUT', 120),
],
];
  • signature.enabled = true z pustym signature.certificate nadal rozwiązuje SignerInterface do null; obie wartości muszą być ustawione.
  • tsa.url = null wymusza rozwiązywanie TsaClient jako null, nawet gdy inne klucze tsa.* są wypełnione.
  • signature.level = null powoduje powrót podpisującego do PAdES B-B.
  • Gdy image_cache_mb ma wartość null (a nie 0), wraca do domyślnej wartości 50 MB; 0 jawnie wyłącza buforowanie.
  • Starsze zmienne środowiskowe TCPDF_* nadal są odczytywane, ale są przestarzałe. Przejdź na NEXTPDF_*.

Odczyt konfiguracji korzysta z dostępu do tablicy o złożoności O(1). preload_fonts kosztem jednorazowego przetwarzania o złożoności O(f) przy starcie procesu roboczego obniża opóźnienie pierwszego żądania. Większa wartość image_cache_mb ogranicza wielokrotne dekodowanie obrazów kosztem pamięci zajmowanej przez proces.

tsa.allow_insecure_http osłabia zaufanie do znaczników czasu i w środowisku produkcyjnym musi pozostać false. Adresy URL TSA powinny pochodzić wyłącznie z zaufanej konfiguracji. Jeśli udostępniasz je przez panel administracyjny, użyj zapory wyjściowej lub polityki DNS, aby ograniczyć fałszowanie żądań. Zobacz /integrations/laravel/security-and-operations/.

Żadna norma nie reguluje kształtu pliku konfiguracyjnego. Wszystkie klucze są weryfikowane względem pakietowego pliku config/nextpdf.php w udokumentowanej rewizji. Semantykę poziomu podpisu określa edycja Premium; wykracza ona poza zakres tej strony Core.

Sekcje signature i tsa obsługują podpisywanie w edycji Premium, gdy zainstalowano nextpdf/premium. Ta opcjonalna funkcja Enterprise nie wymaga żadnych zmian w kodzie pakietu Core. Zobacz https://nextpdf.dev/get-license/?intent=laravel-signing.

  • /integrations/laravel/install/ — publikacja pliku konfiguracyjnego
  • /integrations/laravel/production-usage/ — zobacz konfigurację używaną w rzeczywistym kontrolerze
  • /integrations/laravel/security-and-operations/ — zabezpiecz ustawienia TSA i kolejki
  • /integrations/laravel/boot-and-discovery/ — sprawdź, którym wiązaniem steruje każdy klucz