Przejdź do głównej zawartości

Instalacja NextPDF Artisan

Zainstaluj nextpdf/artisan za pomocą Composera. Composer instaluje również zależność wykonawczą chrome-php/chrome. Następnie zapewnij procesowi PHP dostęp do pliku binarnego Chrome lub Chromium.

Okno terminala
composer require nextpdf/artisan

Pakiet deklaruje następujące ograniczenia w pliku composer.json:

WymaganieOgraniczenieUwagi
php>=8.4 <9.0tylko PHP 8.4
nextpdf/core^3.0 || ^5.2otwartoźródłowy silnik NextPDF
chrome-php/chrome^1.15biblioteka klienta protokołu Chrome DevTools Protocol (CDP); pobierana przez zależności przechodnie
psr/log^3.0opcjonalny punkt wstrzykiwania mechanizmu rejestrowania

Composer automatycznie rozwiązuje zależność chrome-php/chrome. Composer nigdy nie instaluje pliku binarnego Chrome; jest to zależność systemowa.

Mostek wymaga wykonywalnego pliku binarnego Chrome lub Chromium. Domyślnie chrome-php/chrome szuka pliku binarnego w typowych ścieżkach. Aby ustawić jawną ścieżkę, podaj ją w konfiguracji. Zobacz /integrations/artisan/configuration/ oraz osobną stronę /integrations/artisan/chrome-renderer-setup/.

Okno terminala
# Debian / Ubuntu
apt-get install -y chromium
# RHEL / Fedora
dnf install -y chromium
# macOS (Homebrew)
brew install --cask chromium

Zanim skonfigurujesz plik binarny w aplikacji, sprawdź, czy działa w trybie headless:

Okno terminala
chromium --headless --dump-dom about:blank

Po pomyślnym uruchomieniu polecenie wypisuje pusty dokument Document Object Model (DOM) i kończy działanie z kodem 0. Niezerowy kod wyjścia oznacza, że brakuje pliku binarnego lub jego bibliotek współdzielonych. Rozwiąż ten problem przed kontynuowaniem, ponieważ mostek zgłasza tę samą awarię jako ChromeRenderException w czasie renderowania.

<?php
declare(strict_types=1);
use NextPDF\Artisan\ChromeRendererConfig;
use NextPDF\Artisan\ChromeHtmlRenderer;
require __DIR__ . '/vendor/autoload.php';
$renderer = new ChromeHtmlRenderer(new ChromeRendererConfig());
echo $renderer->getHtmlSecurityPolicy()->getName(), PHP_EOL;
// Prints: default

Ten przykład tworzy instancję mechanizmu renderującego i odczytuje domyślną politykę bezpieczeństwa Hypertext Markup Language (HTML) bez uruchamiania Chrome. Potwierdza to, że automatyczne ładowanie oraz powiązania kontraktów nextpdf/core są poprawnie rozwiązywane. (To zachowanie potwierdza test tests/Unit/Artisan/ChromeHtmlRendererTest.php::usesDefaultHtmlSecurityPolicyWhenNoneInjected.)

W środowisku Docker piaskownica Chrome zwykle nie może wystartować bez dodatkowych uprawnień jądra, jeśli Chrome działa jako proces o identyfikatorze (PID) 1 / root. W takim przypadku pakiet udostępnia przełącznik noSandbox. Wyłączenie piaskownicy Chrome wiąże się z realnym kosztem bezpieczeństwa. Strony /integrations/artisan/security-and-operations/ oraz /integrations/artisan/chrome-renderer-setup/ dokumentują ten koszt i jawnie określają jego granice. Nie ustawiaj tego przełącznika bez wcześniejszego przeczytania tej sekcji.

  • chrome-php/chrome obecny, ale brak pliku binarnego. Composer kończy się powodzeniem; pierwsze renderowanie zgłasza ChromeRenderException i opakowuje błąd uruchomienia. Weryfikacja biblioteki jest niezależna od weryfikacji pliku binarnego.
  • chrome-php/chrome nieobecny. Jeśli biblioteka zostanie usunięta z autoloadera, BrowserPool::getBrowser() zgłasza ChromeNotAvailableException wraz z konkretnym poleceniem naprawczym. (Potwierdza to test tests/Unit/Artisan/BrowserPoolTest.php::getBrowserThrowsWhenChromePhpPackageIsUnavailable.)
  • Ograniczenie wersji. nextpdf/core: ^3.0 || ^5.2 — Artisan obsługuje obie główne linie wersji core. Określ wersję core docelową dla aplikacji.

Instalacja mostka wprowadza w obręb granicy zaufania zewnętrzny proces (Chrome). Zapoznaj się z /integrations/artisan/security-and-operations/, zanim udostępnisz jakąkolwiek ścieżkę renderowania dla kodu HTML pochodzącego od użytkownika.

  • /integrations/artisan/overview/
  • /integrations/artisan/configuration/
  • /integrations/artisan/quickstart/
  • /integrations/artisan/chrome-renderer-setup/
  • /integrations/artisan/security-and-operations/