Skip to content

架構深入解析

TCPDF-Next 由 4 個套件中的 26 個模組組成,共有 213 個 PHP 原始碼檔案

專案統計

指標CoreLaravelArtisanPro合計
PHP 原始碼檔案14841747213
模組1612726
測試9087 classes908+
斷言28,88128,881+
PHPStan level88888

命名空間對照

Core (yeeefang/tcpdf-next)

Yeeefang\TcpdfNext\
├── Core\               # Document, ObjectRegistry, TransactionManager, CrossReferenceStream
│   └── Concerns\       # 12 composable traits (HasMetadata, HasPages, ...)
├── Contracts\          # PdfDocumentInterface, SignerInterface, HsmSignerInterface, enums
├── ValueObjects\       # PageSize, Dimension, Margin, Position, Unit
├── Support\            # BinaryBuffer
├── Content\            # TextRenderer, JavaScriptManager, Hyphenator
│   └── Hyphenation\    # HyphenationPatterns
├── Typography\         # FontManager, TrueTypeParser, Type1Parser, FontSubsetter, BiDiResolver
├── Graphics\           # DrawingEngine, TransformEngine, Color, ImageLoader, SvgParser
├── Layout\             # HeaderFooter, ColumnLayout, BookletLayout, PageManager
├── Html\               # HtmlParser, TableParser, CssRule
├── Form\               # FormFieldManager, FormFlattener
├── Barcode\            # Barcode1D, Barcode2D, BarcodeRenderer
│   ├── QrCode\         # QrEncoder
│   ├── DataMatrix\     # DataMatrixEncoder
│   └── Pdf417\         # Pdf417Encoder
├── Navigation\         # BookmarkManager, LinkManager, TocBuilder, AnnotationManager
├── Accessibility\      # StructureTree, RoleMap, StructureElement
├── Security\           # Encryption + Signatures
│   ├── Encryption\     # Aes256Encryptor, SaslPrep
│   ├── Signature\      # DigitalSigner, PadesOrchestrator, CertificateInfo, SignatureAppearance
│   └── Timestamp\      # TsaClient
└── Writer\             # PdfWriter, Linearizer, ViewerPreferences, data classes

Artisan (yeeefang/tcpdf-nextartisan)

Yeeefang\TcpdfNext\
├── Artisan\            # ChromeHtmlRenderer, BrowserPool, ChromeRendererConfig
│   └── Exception\      # ChromeNotAvailableException, ChromeRenderException, PdfParseException
└── Parser\             # PdfTokenizer, CrossRefParser, PdfReader, StreamDecoder, ResourceCollector

Laravel (yeeefang/tcpdf-nextlaravel)

Yeeefang\TcpdfNext\Laravel\
├── TcpdfServiceProvider
├── Facades\Pdf
├── Http\PdfResponse
└── Jobs\GeneratePdfJob

Pro (yeeefang/tcpdf-nextpro)

Yeeefang\TcpdfNext\
├── Archive\            # PdfAManager, PdfAVersion, XmpMetadata, OutputIntent
├── Barcode\            # Specialty barcodes
│   ├── MicroQr\        # MicroQrEncoder
│   ├── DotCode\        # DotCodeEncoder
│   ├── HanXin\         # HanXinEncoder
│   ├── JabCode\        # JabCodeEncoder (LDPC, interleaver, matrix)
│   ├── Gs1\            # Gs1DataParser
│   └── Imb\            # ImbEncoder
├── Security\
│   ├── Ltv\            # LtvManager, DssBuilder, OcspClient, CrlFetcher, CertificateChainValidator
│   ├── Signature\Hsm\  # Pkcs11Signer, OpenSslEngineSigner
│   ├── Timestamp\      # DocumentTimestamp
│   ├── Asn1\           # CertificateParser, AlgorithmIdentifier
│   └── CertificateTransparency\  # CtValidationResult
└── Writer\             # IncrementalUpdateWriter

延遲初始化

Document 類別在建構子中只會實例化必要的子引擎:

總是初始化: DocumentData、PdfWriter、FontManager、DrawingEngine、TransformEngine、TextRenderer、HeaderFooter、ColumnLayout、BookmarkManager、LinkManager、TocBuilder、AnnotationManager、PageManager、FontMetrics

延遲載入(首次使用時才建立): FormFieldManager、LayerManager、TemplateManager、TransactionManager、BookletLayout、FileAttachment、JavaScriptManager、SvgParser、EpsParser、StructureTree、SpotColorManager、ImageLoader、BiDiResolver

這樣的設計讓簡單文件的基礎記憶體佔用保持在最小值,同時在需要時提供完整功能。

擴充套件整合

Core 套件透過 class_exists() 在執行時期偵測擴充套件:

php
// Artisan detection
$rendererClass = 'Yeeefang\\TcpdfNext\\Artisan\\ChromeHtmlRenderer';
if (!class_exists($rendererClass)) {
    throw new \RuntimeException(
        'Chrome renderer requires yeeefang/tcpdf-nextartisan.'
    );
}

這代表:

  • Core 對 Artisan、Laravel 或 Pro 完全沒有硬性相依
  • 擴充套件由 Composer 自動載入——只要 composer require 就能使用
  • Laravel 的 ServiceProvider 會自動偵測 Artisan 和 Pro,並據此設定對應的繫結

以 LGPL-3.0-or-later 授權釋出。