Przejdź do głównej zawartości

Konfiguracja NextPDF dla CodeIgniter 4

Konfiguracja NextPDF znajduje się w klasie NextPDF\CodeIgniter\Config\NextPdf, podklasie BaseConfig z CodeIgniter. Wartości można nadpisać przez rozszerzenie klasy w katalogu app/Config/ albo ustawienie kluczy .env z przedrostkiem nextpdf. Wartości domyślne działają bez dodatkowej konfiguracji.

NextPdf to typowana klasa BaseConfig. Celowo nie jest oznaczona jako final. W CodeIgniter konfiguracja aplikacji rozszerza klasę pakietu, dzięki czemu aplikacja może nadpisać wartości domyślne. Gdy CodeIgniter tworzy konfigurację, BaseConfig rozwiązuje nadpisania środowiskowe dla każdej właściwości publicznej, również dla zagnieżdżonych kluczy tablic.

Domyślne ścieżki czcionek i pamięci podręcznej korzystają ze stałej WRITEPATH CodeIgniter: WRITEPATH . 'fonts' oraz WRITEPATH . 'cache/nextpdf'.

Każdy z poniższych kluczy jest właściwością publiczną klasy NextPdf. Wartości domyślne zweryfikowano względem źródła pakietu.

KluczTypDomyślnaOpis
pageFormatstringA4Format strony.
orientationstringPP orientacja pionowa lub L pozioma.
unitstringmmJednostka miary.
defaults.creatorstringNextPDFMetadane twórcy formatu Portable Document Format (PDF).
defaults.authorstring''Metadane autora; pomijane, gdy puste.
defaults.languagestringenZnacznik języka dokumentu.
defaults.margin_topfloat10.0Margines górny.
defaults.margin_rightfloat10.0Margines prawy.
defaults.margin_bottomfloat10.0Margines dolny.
defaults.margin_leftfloat10.0Margines lewy.
defaults.font_familystringdejavusansDomyślna rodzina czcionek.
defaults.font_sizefloat12.0Domyślny rozmiar czcionki.
defaults.trim_boxlist<float>|nullnullRamka przycięcia (trim box), jeśli ustawiona.
defaults.bleed_boxlist<float>|nullnullRamka spadu (bleed box), jeśli ustawiona.

Pakiet stosuje defaults.creator oraz defaults.language w każdym dokumencie. Klucz defaults.author stosuje tylko wtedy, gdy wartość jest niepusta.

KluczTypDomyślnaOpis
fontsPathstringWRITEPATH/fontsKatalog plików czcionek.
cachePathstringWRITEPATH/cache/nextpdfKatalog pamięci podręcznej.
preloadFontslist<string>[]Bezwzględne ścieżki czcionek wczytywanych wstępnie przy starcie.
imageCacheMbint50Budżet pamięci podręcznej obrazów w megabajtach (MB), zarządzanej algorytmem least recently used (LRU).
fontCacheLockingbooltrueBlokowanie pamięci podręcznej czcionek po jej rozgrzaniu.

Rejestr czcionek odrzuca każdą ścieżkę fontsPath, która zawiera opakowanie strumienia (://) lub bajt zerowy, i zgłasza błąd wykonania. Zobacz /integrations/codeigniter/security-and-operations/.

KluczTypDomyślnaOpis
pdfastring|nullnullWersja PDF/A: 4, 4e, 4f.
iccProfile.rgbstring|nullnullŚcieżka profilu International Color Consortium (ICC) dla przestrzeni barw czerwień, zieleń i niebieski (RGB).
iccProfile.cmykstring|nullnullŚcieżka profilu ICC dla przestrzeni barw cyjan, magenta, żółty i kluczowy (CMYK).

pdfa działa tylko wtedy, gdy zainstalowano NextPDF Pro i dostępna jest funkcja archiwizacji. W samym rdzeniu klucz jest ignorowany.

KluczTypDomyślnaOpis
signature.enabledboolfalseWłącza usługę składania podpisu.
signature.certificatestring|nullnullŚcieżka pliku certyfikatu.
signature.private_keystring|nullnullŚcieżka pliku klucza prywatnego.
signature.passwordstring''Hasło klucza prywatnego.
signature.extra_certslist<string>[]Ścieżki do dodatkowych certyfikatów łańcucha.
signature.levelstringB-BIdentyfikator poziomu podpisu.

Services::pdfSigner() zwraca null, chyba że signature.enabled ma wartość true, a signature.certificate jest niepusty. Domyślny poziom to B-B. NextPDF Pro dostarcza podstawowy podpis B-B. Poziomy długoterminowej walidacji są odrębną funkcją Enterprise i opisano je w dokumentacji Premium, nie tutaj.

PDF Advanced Electronic Signatures (PAdES) B-T tworzy silnik Core. Sama integracja z CodeIgniter nie dodaje B-T, a Pro dostarcza wyłącznie podstawowy poziom B-B. Ta dokumentacja zostanie zaktualizowana, jeśli B-T pojawi się w Pro.

KluczTypDomyślnaOpis
tsa.urlstring|nullnullAdres URL punktu końcowego urzędu znacznika czasu (TSA).
tsa.usernamestring''Nazwa użytkownika do uwierzytelniania podstawowego TSA.
tsa.passwordstring''Hasło do uwierzytelniania podstawowego TSA.
tsa.certstring|nullnullŚcieżka certyfikatu klienta.
tsa.keystring|nullnullŚcieżka klucza klienta.
tsa.timeoutint30Limit czasu żądania w sekundach.
tsa.pinned_public_keyslist<string>[]Przypięte klucze publiczne TSA.
tsa.warn_on_key_rotationbooltrueOstrzega przy rotacji klucza TSA.
tsa.allow_insecure_httpboolfalseZezwala na nieszyfrowany HTTP do urzędu TSA.

Services::tsaClient() zwraca null, gdy tsa.url ma wartość null lub jest pustym ciągiem znaków. Gdy wybierzesz poziom podpisu wymagający znacznika czasu, mechanizm podpisywania automatycznie dołącza klienta TSA.

KluczTypDomyślnaOpis
ocspCache.enabledbooltrueWłącza pamięć podręczną odpowiedzi protokołu Online Certificate Status Protocol (OCSP).
ocspCache.ttlint86400Czas życia pamięci podręcznej (TTL) w sekundach.
ocspCache.directorystring|nullnullKatalog pamięci podręcznej; domyślnie ustawiany przez silnik, gdy wartością jest null.
KluczTypDomyślnaOpis
artisan.chrome_binarystring|nullnullŚcieżka pliku binarnego Chrome/Chromium.
artisan.render_timeoutint30Limit czasu renderowania w sekundach.
artisan.default_cssstring''Domyślny arkusz stylów.
artisan.no_sandboxboolfalsePrzekazuje --no-sandbox do Chrome.
artisan.max_html_sizeint5000000Maksymalny rozmiar wejściowego kodu HTML w bajtach.

Renderer Chrome jest konfigurowany dla dokumentu tylko wtedy, gdy artisan.chrome_binary jest ustawiony i zainstalowano nextpdf/artisan.

BaseConfig rozwiązuje nadpisania środowiskowe osobno dla poszczególnych właściwości. Klucz wyszukiwania składa się z krótkiej nazwy klasy zapisanej małymi literami, nextpdf, oraz ścieżki właściwości. Do adresowania zagnieżdżonych kluczy tablic używaj kropek. Akceptowane są zarówno formy z kropkami, jak i z podkreśleniami.

.env
nextpdf.fontsPath = /var/www/writable/fonts
nextpdf.imageCacheMb = 100
nextpdf.signature.enabled = true
nextpdf.signature.certificate = /etc/nextpdf/cert.pem
nextpdf.signature.private_key = /etc/nextpdf/key.pem
nextpdf.tsa.url = https://tsa.example.com/timestamp
nextpdf.artisan.chrome_binary = /usr/bin/chromium
nextpdf.defaults.creator = Acme Billing
nextpdf.defaults.language = zh-TW

Przedrostek to krótka nazwa klasy zapisana małymi literami. Pozostaje nextpdf, mimo że sama klasa jest zapisana jako NextPdf. Można też użyć w pełni kwalifikowanej formy (NextPDF\CodeIgniter\Config\NextPdf.fontsPath).

Aby mieć typowaną konfigurację kontrolowaną wersjonowaniem, rozszerz klasę pakietu w katalogu app/Config/. CodeIgniter wczytuje klasę aplikacji zamiast domyślnej klasy pakietu. Ten plik deklaruje klasę i nie powoduje żadnych efektów ubocznych. Dzięki temu spełnia wymaganie PSR-1: plik albo deklaruje symbole, albo wykonuje logikę z efektami ubocznymi, ale nie jedno i drugie (PSR-1 §x1.x1.p3).

<?php
declare(strict_types=1);
namespace Config;
use NextPDF\CodeIgniter\Config\NextPdf as BaseNextPdf;
final class NextPdf extends BaseNextPdf
{
public int $imageCacheMb = 100;
public string $fontsPath = WRITEPATH . 'fonts';
/** @var array{creator: string, author: string, language: string, margin_top: float, margin_right: float, margin_bottom: float, margin_left: float, font_family: string, font_size: float, trim_box: list<float>|null, bleed_box: list<float>|null} */
public array $defaults = [
'creator' => 'Acme Billing',
'author' => 'Acme, Inc.',
'language' => 'en',
'margin_top' => 12.0,
'margin_right' => 12.0,
'margin_bottom' => 12.0,
'margin_left' => 12.0,
'font_family' => 'dejavusans',
'font_size' => 11.0,
'trim_box' => null,
'bleed_box' => null,
];
}
  • Nadpisanie pojedynczego zagnieżdżonego klucza za pomocą .env zmienia tylko ten klucz; reszta tablicy zachowuje wartości domyślne.
  • Wartości .env są ciągami znaków. CodeIgniter rzutuje true/false oraz ciągi liczbowe. Wartości, które mają pozostać dosłownymi ciągami znaków, ujmij w cudzysłów.
  • Rozszerzenie klasy za pomocą częściowej tablicy defaults zastępuje całą tablicę. Uwzględnij każdy klucz, jak pokazano powyżej.

Ścieżki do certyfikatów i kluczy trzymaj poza systemem kontroli wersji. Dostarczaj je przez .env lub menedżera sekretów. tsa.allow_insecure_http musi pozostać false w środowisku produkcyjnym. Zobacz /integrations/codeigniter/security-and-operations/.

  • Plik rozszerzający konfigurację aplikacji deklaruje jedną klasę i nie powoduje efektów ubocznych (PSR-1 §x1.x1.p3).

Rdzeń NextPDF jest objęty licencją Apache-2.0. Klucze signature.* i pdfa działają tylko wtedy, gdy zainstalowano NextPDF Pro lub Enterprise. Pakiet CodeIgniter udostępnia odpowiadające tym kluczom metody usług. Metody te zwracają null, dopóki nie zainstalujesz odpowiedniego pakietu Premium. Zobacz </get-license/?intent=codeigniter-signing>.

  • /integrations/codeigniter/install/ — instalacja pakietu.
  • /integrations/codeigniter/quickstart/ — pierwszy plik PDF.
  • /integrations/codeigniter/production-usage/ — kontrolery i zadania kolejkowe z wstrzykiwaniem zależności (DI).
  • /integrations/codeigniter/security-and-operations/ — utwardzanie konfiguracji podpisywania oraz ścieżek.