Bỏ qua để đến nội dung

Cấu hình gói NextPDF Laravel

config/nextpdf.php được publish bằng php artisan vendor:publish --tag=nextpdf-config. Mỗi khóa đều có biến môi trường dự phòng và giá trị mặc định cố định trong mã. Trang này liệt kê từng khóa đúng như cách khóa đó xuất hiện trong config/nextpdf.php của gói.

Terminal window
php artisan vendor:publish --tag=nextpdf-config

Trong quá trình register(), provider cũng gộp các giá trị mặc định của gói vào khóa config nextpdf. Những khóa chưa được thiết lập khi đó sẽ dùng các giá trị bên dưới, kể cả trước khi bạn publish tệp config.

Hầu hết các biến môi trường chấp nhận tên dạng NEXTPDF_* hoặc tên cũ dạng TCPDF_*. Tiền tố cũ vẫn dùng được trong giai đoạn chuyển tiếp được mô tả trong UPGRADE.md. Dùng NEXTPDF_* cho các triển khai mới. Tệp config phân giải giá trị theo thứ tự ưu tiên này: biến môi trường → giá trị trong tệp đã publish → giá trị mặc định của gói.

KhóaEnv (chính)Mặc địnhHiệu ứng
page_formatNEXTPDF_PAGE_FORMATA4Khổ trang mặc định: A4, A3, A5, Letter, Legal hoặc Tabloid
orientationNEXTPDF_ORIENTATIONPDọc (P) hoặc ngang (L)
unitNEXTPDF_UNITmmĐơn vị đo: pt, mm, cm hoặc in
defaults.creatorNEXTPDF_CREATORNextPDFMetadata về người tạo tài liệu; được áp dụng cho PdfDocumentInterface binding
defaults.authorNEXTPDF_AUTHOR(trống)Metadata tác giả; chỉ được áp dụng khi không rỗng
defaults.languageNEXTPDF_LANGenNgôn ngữ tài liệu; được áp dụng cho document binding
defaults.margin_top / _right / _bottom / _left10Lề mặc định
defaults.font_familydejavusansHọ phông chữ mặc định
defaults.font_size12Cỡ phông chữ mặc định
defaults.trim_boxnullTrimBox [left, bottom, right, top] theo điểm (point), hoặc null
defaults.bleed_boxnullBleedBox [left, bottom, right, top] theo điểm (point), hoặc null

Provider áp dụng defaults.creator, defaults.language, và (khi được thiết lập) defaults.author cho mỗi tài liệu vừa được phân giải. Provider bỏ qua defaults.author khi giá trị rỗng.

KhóaEnv (chính)Mặc địnhHiệu ứng
pdfaNEXTPDF_PDFAnullCấp độ lưu trữ PDF/A: null, 4, 4e, hoặc 4f. Bất kỳ giá trị nào khác null sẽ bật PDF/A trên document binding và yêu cầu nextpdf/premium
fonts_pathNEXTPDF_FONTS_PATHresource_path('fonts')Thư mục chứa các phông chữ TrueType bổ sung; thiết lập đường dẫn tìm kiếm của font registry
cache_pathNEXTPDF_CACHE_PATHstorage_path('framework/cache/tcpdf')Thư mục cache cho phông chữ đã phân tích và tệp tạm
icc_profile.rgbNEXTPDF_ICC_PROFILE_RGBnullĐường dẫn hồ sơ ICC RGB; bắt buộc cho PDF/A
icc_profile.cmykNEXTPDF_ICC_PROFILE_CMYKnullHồ sơ ICC CMYK tùy chọn cho quy trình in
font_cache_lockingNEXTPDF_FONT_CACHE_LOCKINGtrueDùng flock cho cache phông chữ để tránh hỏng dữ liệu khi nhiều queue worker ghi đồng thời

Giá trị pdfa khác null yêu cầu gói Premium. Nếu thiếu nextpdf/premium, việc phân giải binding của tài liệu khi pdfa đã được thiết lập sẽ phát sinh lỗi không tìm thấy lớp cho kiểu phiên bản PDF/A. Trang này không mô tả hành vi lưu trữ của Premium. Xem tài liệu Premium.

KhóaEnv (chính)Mặc địnhHiệu ứng
preload_fonts[]Các đường dẫn tuyệt đối đến tệp phông chữ được phân tích khi worker khởi động. Font registry bị khóa sau warm start
image_cache_mbNEXTPDF_IMAGE_CACHE_MB50Ngân sách cache ảnh theo kiểu ít dùng gần đây nhất (LRU) tính bằng megabyte (MB). 0 tắt cache. Không có giới hạn trên nào được áp dụng ở cấp provider

Ngân sách cache ảnh không có giới hạn trên do provider áp dụng. Hãy dùng giới hạn bộ nhớ của container hoặc php.inimemory_limit để giới hạn nó. Tệp config khuyến nghị mức tối đa thực tế là 256 MB.

KhóaEnv (chính)Mặc địnhHiệu ứng
signature.enabledNEXTPDF_SIGN_ENABLEDfalseKhi là false, hoặc khi chứng chỉ rỗng, SignerInterface sẽ phân giải thành null
signature.certificateNEXTPDF_SIGN_CERTnullĐường dẫn chứng chỉ ký
signature.private_keyNEXTPDF_SIGN_KEYnullĐường dẫn khóa riêng tư
signature.passwordNEXTPDF_SIGN_PASSWORD(trống)Cụm mật khẩu của khóa
signature.extra_certs[]Các đường dẫn chứng chỉ CA trung gian
signature.levelNEXTPDF_SIGN_LEVELB-BCấp độ baseline Chữ ký Điện tử Nâng cao cho PDF (PAdES) được truyền cho signer

Gói Core được mô tả ở đây không kèm phần triển khai signer; SignerInterface phân giải thành null cho đến khi nextpdf/premium cung cấp một bản triển khai. Với Premium, level: B-B tạo ra một chữ ký baseline PAdES B-B. Các baseline PAdES cao hơn phụ thuộc vào timestamp authority đã được cấu hình và khả năng Premium; trang này không mô tả các cấp độ đó.

KhóaEnv (chính)Mặc địnhHiệu ứng
tsa.urlNEXTPDF_TSA_URLnullEndpoint của timestamp authority (TSA). Khi để trống, TsaClient phân giải thành null
tsa.username / tsa.passwordNEXTPDF_TSA_USERNAME / _PASSWORD(trống)Thông tin đăng nhập HTTP của TSA
tsa.cert / tsa.keyNEXTPDF_TSA_CERT / _KEYnullChứng chỉ / khóa client cho Bảo mật tầng truyền tải hai chiều (mTLS) tới TSA
tsa.timeoutNEXTPDF_TSA_TIMEOUT30Thời gian chờ HTTP tính bằng giây cho client PSR-18
tsa.pinned_public_keys[]Các pin SubjectPublicKeyInfo (SPKI) SHA-256 dạng Base64 (RFC 7469). Để trống sẽ tắt pinning
tsa.warn_on_key_rotationNEXTPDF_TSA_WARN_ROTATIONtruePhát ra cảnh báo khi TSA xuất trình một SPKI không được pin
tsa.allow_insecure_httpNEXTPDF_TSA_ALLOW_INSECURE_HTTPfalseCho phép HTTP văn bản thuần tới TSA. Hãy giữ là false trong môi trường production
KhóaEnv (chính)Mặc địnhHiệu ứng
ocsp_cache.enabledNEXTPDF_OCSP_CACHE_ENABLEDtrueCache phản hồi của Giao thức Trạng thái Chứng chỉ Trực tuyến (OCSP) trong khi xác thực
ocsp_cache.ttlNEXTPDF_OCSP_CACHE_TTL86400TTL của cache tính bằng giây
ocsp_cache.directoryNEXTPDF_OCSP_CACHE_DIRnullThư mục cache; null giữ cache chỉ trong bộ nhớ
KhóaEnv (chính)Mặc địnhHiệu ứng
queue.connectionNEXTPDF_QUEUE_CONNECTIONnullKết nối hàng đợi; null dùng kết nối mặc định
queue.queueNEXTPDF_QUEUE_NAMEpdfHàng đợi mà GeneratePdfJob được đẩy vào
queue.timeoutNEXTPDF_QUEUE_TIMEOUT120Thời gian chờ mỗi công việc tính bằng giây

Bộ kết xuất Chrome CDP (tiện ích mở rộng Artisan)

Phần tiêu đề “Bộ kết xuất Chrome CDP (tiện ích mở rộng Artisan)”
KhóaEnv (chính)Mặc địnhHiệu ứng
artisan.chrome_binaryNEXTPDF_ARTISAN_CHROME_BINARYgiá trị env hoặc chưa thiết lậpĐường dẫn tới tệp nhị phân Chrome/Chromium
artisan.render_timeoutNEXTPDF_ARTISAN_RENDER_TIMEOUT30Thời gian chờ kết xuất tính bằng giây
artisan.default_cssNEXTPDF_ARTISAN_DEFAULT_CSS(trống)CSS mặc định được chèn vào HTML đã kết xuất
artisan.no_sandboxNEXTPDF_ARTISAN_NO_SANDBOXfalseTắt Chrome sandbox
artisan.max_html_sizeNEXTPDF_ARTISAN_MAX_HTML_SIZE5000000Kích thước HTML đầu vào tối đa tính bằng byte

Phần artisan chỉ được áp dụng cho document binding khi có lớp browser-factory của Chrome (tiện ích mở rộng nextpdf/artisan). Khi không có lớp đó, phần này bị bỏ qua.

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 với signature.certificate rỗng vẫn phân giải SignerInterface thành null; cả hai giá trị đều phải được thiết lập.
  • tsa.url = null buộc TsaClient thành null, ngay cả khi các khóa tsa.* khác đã được điền giá trị.
  • signature.level = null quay về dùng PAdES B-B trên signer.
  • image_cache_mb đặt thành null (không phải 0) sẽ quay về dùng giá trị mặc định 50 MB; 0 tắt cache một cách tường minh.
  • Các biến môi trường cũ TCPDF_* vẫn đọc được nhưng không còn được khuyến nghị. Hãy chuyển sang NEXTPDF_*.

Đọc config dùng truy cập mảng O(1). preload_fonts đánh đổi một lần phân tích O(f) khi worker khởi động để có độ trễ thấp hơn ở yêu cầu đầu tiên. image_cache_mb lớn hơn sẽ giảm việc giải mã ảnh lặp lại, đổi lại là bộ nhớ thường trú trong tiến trình.

tsa.allow_insecure_http làm suy yếu mức độ tin cậy của timestamp và phải luôn ở false trong môi trường production. URL của TSA chỉ nên đến từ cấu hình đáng tin cậy. Nếu bạn để lộ chúng qua bề mặt quản trị, hãy dùng tường lửa egress hoặc chính sách DNS để giảm thiểu rủi ro giả mạo yêu cầu. Xem /integrations/laravel/security-and-operations/.

Không có tiêu chuẩn quy phạm nào chi phối cấu trúc của tệp cấu hình. Tất cả các khóa đều được kiểm chứng đối chiếu với config/nextpdf.php của gói tại bản sửa đổi được mô tả. Premium chi phối ngữ nghĩa cấp độ chữ ký, vốn nằm ngoài phạm vi của trang Core này.

Phần signature và tsa kích hoạt luồng ký của Premium khi nextpdf/premium được cài đặt. Khả năng Enterprise tùy chọn này không yêu cầu thay đổi mã của gói Core. Xem https://nextpdf.dev/get-license/?intent=laravel-signing.

  • /integrations/laravel/install/ — publish tệp config
  • /integrations/laravel/production-usage/ — xem cấu hình được áp dụng trong một controller thực tế
  • /integrations/laravel/security-and-operations/ — gia cố thiết lập TSA và hàng đợi
  • /integrations/laravel/boot-and-discovery/ — xem mỗi khóa tác động đến binding nào