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

Cấu hình NextPDF cho CodeIgniter 4

NextPDF lưu cấu hình trong NextPDF\CodeIgniter\Config\NextPdf, một lớp con của BaseConfig trong CodeIgniter. Bạn có thể ghi đè giá trị bằng cách mở rộng lớp này trong app/Config/ hoặc đặt các khóa .env với tiền tố nextpdf.. Các giá trị mặc định hoạt động mà không cần cấu hình thêm.

NextPdf là một BaseConfig có khai báo kiểu. Lớp này được thiết kế có chủ đích là không phải final. Trong CodeIgniter, cấu hình của ứng dụng mở rộng lớp của gói để ứng dụng của bạn có thể ghi đè các giá trị mặc định. Khi CodeIgniter khởi tạo cấu hình, BaseConfig sẽ phân giải các giá trị ghi đè từ môi trường cho mọi thuộc tính công khai, bao gồm cả các khóa mảng lồng nhau.

Đường dẫn phông chữ và bộ đệm mặc định dùng hằng số WRITEPATH của CodeIgniter: WRITEPATH . 'fonts'WRITEPATH . 'cache/nextpdf'.

Mỗi khóa dưới đây là một thuộc tính công khai của NextPdf. Các giá trị mặc định đã được xác minh dựa trên mã nguồn của gói.

Giá trị mặc định của trang và tài liệu

Phần tiêu đề “Giá trị mặc định của trang và tài liệu”
KhóaKiểuMặc địnhMô tả
pageFormatstringA4Định dạng trang.
orientationstringPP cho khổ dọc hoặc L cho khổ ngang.
unitstringmmĐơn vị đo lường.
defaults.creatorstringNextPDFSiêu dữ liệu creator của Portable Document Format (PDF).
defaults.authorstring''Siêu dữ liệu tác giả; bỏ qua khi để trống.
defaults.languagestringenThẻ ngôn ngữ của tài liệu.
defaults.margin_topfloat10.0Lề trên.
defaults.margin_rightfloat10.0Lề phải.
defaults.margin_bottomfloat10.0Lề dưới.
defaults.margin_leftfloat10.0Lề trái.
defaults.font_familystringdejavusansHọ phông chữ mặc định.
defaults.font_sizefloat12.0Cỡ phông chữ mặc định.
defaults.trim_boxlist<float>|nullnullTrim box, nếu được đặt.
defaults.bleed_boxlist<float>|nullnullBleed box, nếu được đặt.

Gói áp dụng defaults.creatordefaults.language cho mọi tài liệu. Gói chỉ áp dụng defaults.author khi giá trị không trống.

KhóaKiểuMặc địnhMô tả
fontsPathstringWRITEPATH/fontsThư mục tệp phông chữ.
cachePathstringWRITEPATH/cache/nextpdfThư mục bộ đệm.
preloadFontslist<string>[]Các đường dẫn phông chữ tuyệt đối được làm nóng khi khởi động.
imageCacheMbint50Ngân sách bộ đệm hình ảnh theo cơ chế ít được dùng gần đây nhất (LRU), tính bằng megabyte (MB).
fontCacheLockingbooltrueKhóa bộ đệm phông chữ sau khi làm nóng.

Trình đăng ký phông chữ từ chối mọi fontsPath có chứa stream wrapper (://) hoặc byte null, và phát sinh lỗi thời gian chạy. Xem /integrations/codeigniter/security-and-operations/.

KhóaKiểuMặc địnhMô tả
pdfastring|nullnullPhiên bản PDF/A: 4, 4e, 4f.
iccProfile.rgbstring|nullnullĐường dẫn hồ sơ International Color Consortium (ICC) cho đỏ, lục và lam (RGB).
iccProfile.cmykstring|nullnullĐường dẫn hồ sơ ICC cho lục lam, đỏ tươi, vàng và đen (CMYK).

pdfa chỉ có hiệu lực khi NextPDF Pro được cài đặt và khả năng lưu trữ có sẵn. Khi chỉ dùng core, khóa này bị bỏ qua.

KhóaKiểuMặc địnhMô tả
signature.enabledboolfalseBật dịch vụ ký.
signature.certificatestring|nullnullĐường dẫn tệp chứng chỉ.
signature.private_keystring|nullnullĐường dẫn tệp khóa riêng tư.
signature.passwordstring''Mật khẩu khóa riêng tư.
signature.extra_certslist<string>[]Các đường dẫn chứng chỉ chuỗi bổ sung.
signature.levelstringB-BĐịnh danh cấp độ chữ ký.

Services::pdfSigner() trả về null trừ khi signature.enabledtruesignature.certificate không trống. Cấp độ mặc định là B-B. NextPDF Pro cung cấp chữ ký cơ sở B-B. Các cấp độ xác thực dài hạn là khả năng riêng của Enterprise và được ghi lại trong tài liệu tham khảo Premium, không phải ở đây.

PDF Advanced Electronic Signatures (PAdES) B-T được tạo bởi engine Core. Bản tích hợp CodeIgniter tự thân không thêm B-T, và Pro chỉ cung cấp chữ ký cơ sở B-B. Tài liệu này sẽ được cập nhật nếu và khi nào Pro B-T ra mắt.

KhóaKiểuMặc địnhMô tả
tsa.urlstring|nullnullURL điểm cuối của Cơ quan cấp dấu thời gian (TSA).
tsa.usernamestring''Tên người dùng xác thực cơ bản của TSA.
tsa.passwordstring''Mật khẩu xác thực cơ bản của TSA.
tsa.certstring|nullnullĐường dẫn chứng chỉ máy khách.
tsa.keystring|nullnullĐường dẫn khóa máy khách.
tsa.timeoutint30Thời gian chờ yêu cầu, tính bằng giây.
tsa.pinned_public_keyslist<string>[]Các khóa công khai TSA đã được ghim.
tsa.warn_on_key_rotationbooltrueCảnh báo khi xoay vòng khóa TSA.
tsa.allow_insecure_httpboolfalseCho phép HTTP văn bản thuần đến TSA.

Services::tsaClient() trả về null khi tsa.urlnull hoặc là chuỗi rỗng. Khi bạn chọn một cấp độ chữ ký cần dấu thời gian, bộ ký sẽ tự động đính kèm máy khách TSA.

KhóaKiểuMặc địnhMô tả
ocspCache.enabledbooltrueBật bộ đệm phản hồi Online Certificate Status Protocol (OCSP).
ocspCache.ttlint86400Thời gian tồn tại (TTL) của bộ đệm, tính bằng giây.
ocspCache.directorystring|nullnullThư mục bộ đệm; dùng mặc định của engine khi để là null.
KhóaKiểuMặc địnhMô tả
artisan.chrome_binarystring|nullnullĐường dẫn tệp nhị phân Chrome/Chromium.
artisan.render_timeoutint30Thời gian chờ kết xuất, tính bằng giây.
artisan.default_cssstring''Bảng định kiểu mặc định.
artisan.no_sandboxboolfalseTruyền --no-sandbox cho Chrome.
artisan.max_html_sizeint5000000Kích thước HTML đầu vào tối đa, tính bằng byte.

Bộ kết xuất Chrome chỉ được cấu hình cho tài liệu khi artisan.chrome_binary được đặt nextpdf/artisan được cài đặt.

BaseConfig phân giải các giá trị ghi đè từ môi trường theo từng thuộc tính. Khóa tra cứu là tên lớp ngắn viết thường, nextpdf, theo sau là đường dẫn thuộc tính. Dùng dấu chấm để chỉ định các khóa mảng lồng nhau. Cả dạng dùng dấu chấm lẫn dạng dùng gạch dưới đều được chấp nhận.

.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

Tiền tố là tên lớp ngắn viết thường. Nó vẫn là nextpdf ngay cả khi lớp được viết là NextPdf. Bạn cũng có thể dùng dạng đầy đủ (NextPDF\CodeIgniter\Config\NextPdf.fontsPath).

Để có cấu hình có khai báo kiểu và được quản lý phiên bản, hãy mở rộng lớp của gói trong app/Config/. CodeIgniter tải lớp của ứng dụng thay cho mặc định của gói. Tệp này khai báo một lớp và không gây tác dụng phụ. Điều này giúp tệp phù hợp với kỳ vọng của PSR-1 rằng một tệp hoặc khai báo ký hiệu, hoặc chạy logic có tác dụng phụ, nhưng không làm cả hai việc (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,
];
}
  • Ghi đè một khóa lồng nhau bằng .env chỉ thay đổi khóa đó; phần còn lại của mảng vẫn giữ giá trị mặc định.
  • .env lưu giá trị dưới dạng chuỗi. CodeIgniter chuyển đổi true/false và các chuỗi số. Hãy đặt trong dấu nháy những giá trị cần giữ nguyên là chuỗi ký tự.
  • Mở rộng lớp bằng một mảng defaults chỉ có một phần sẽ thay thế toàn bộ mảng. Hãy bao gồm mọi khóa, như minh họa ở trên.

Đừng đưa đường dẫn chứng chỉ và khóa vào hệ thống quản lý mã nguồn. Hãy cung cấp chúng qua .env hoặc một trình quản lý bí mật. tsa.allow_insecure_http phải được giữ ở mức false trong môi trường production. Xem /integrations/codeigniter/security-and-operations/.

  • Tệp mở rộng cấu hình của ứng dụng khai báo một lớp và không có tác dụng phụ (PSR-1 §x1.x1.p3).

NextPDF core là Apache-2.0. Các khóa signature.* và pdfa chỉ có hiệu lực khi NextPDF Pro hoặc Enterprise được cài đặt. Gói CodeIgniter cung cấp các phương thức dịch vụ tương ứng. Các phương thức đó trả về null cho đến khi bạn cài đặt gói Premium tương ứng. Xem </get-license/?intent=codeigniter-signing>.

  • /integrations/codeigniter/install/ — cài đặt gói.
  • /integrations/codeigniter/quickstart/ — PDF đầu tiên.
  • /integrations/codeigniter/production-usage/ — các controller và queue job được kết nối qua DI.
  • /integrations/codeigniter/security-and-operations/ — gia cố cấu hình ký và đường dẫn.