Installer avec Composer · Packagist ↗

Module optionnel · pdftoolkit/pdf-codecs 0.1.0

English | Français

Une bibliothèque PHP distincte et optionnelle pour décoder JPEG (DCTDecode), JPEG 2000 (JPXDecode) et JBIG2 (JBIG2Decode). Elle reçoit des octets encodés et renvoie des plans de composantes explicites. Elle ne lit pas un document PDF et n’effectue pas le rendu d’une page.

Les guides consignent les mécanismes implémentés, les validations exécutables et les exclusions explicites. Un corpus validé ne constitue pas une preuve de conformité universelle pour tous les flux possibles.

Installation et utilisation

composer require pdftoolkit/pdf-codecs:^0.1
use PDFToolkit\Codecs\Codec;
use PDFToolkit\Codecs\DecodeLimits;
use PDFToolkit\Codecs\DecodeRequest;
use PDFToolkit\Codecs\PhpDecoder;

$decoder = new PhpDecoder(new DecodeLimits(maxPixels: 4_000_000));
$image = $decoder->decode(new DecodeRequest(Codec::Jpeg2000, $encodedBytes));
$sample = $image->components[0]->sample(0, 0);

L’appelant fournit les octets encodés. L’application manipulant explicitement un fichier local est examples/decode.php.

Guide Périmètre implémenté
Architecture Requêtes/résultats immuables, plans de composantes et propriété des ressources.
JPEG DCT séquentiel et progressif huit bits, échantillonnage, marqueurs de reprise et priorité des transformations de couleur PDF.
JPEG 2000 Décodage des composantes PDF JPX, précision et géométrie, transformations du flux et métadonnées couleur/alpha conservées.
JBIG2 Profil PDF binaire arithmétique/Huffman/MMR, symboles, texte, raffinement, motifs, demi-teintes et dictionnaires globaux.

Avec Reader, installer ce package dans la même application Composer. Reader détecte d’abord un décodeur natif compatible, puis cette bibliothèque optionnelle. Si aucun ne traite le profil demandé, il indique la capacité manquante et la commande Composer ; il n’installe jamais un package lui-même.

Contrat

PhpDecoder sélectionne le codec demandé. Chaque appel possède son état de décodage et reçoit des DecodeLimits configurables. DecodedImage conserve l’origine de l’image, la géométrie d’échantillonnage des composantes, leur précision, leur signe, les métadonnées de couleur et l’association alpha. ComponentPlane::sample() renvoie l’échantillon entier original ; les lignes compactées placent les bits de poids fort en premier, avec bourrage seulement en fin de ligne. Les valeurs signées sont en complément à deux sur leur précision déclarée, y compris sur 38 bits.

Le décodeur ne réduit pas silencieusement la précision, n’inverse pas les échantillons CMYK, ne convertit pas une couleur ICC en RGB, n’applique pas le tableau PDF Decode et n’aplatit pas la transparence. Ces interprétations appartiennent au consommateur. Les règles PDF de transformation de couleur JPEG font partie du contrat DCT et sont documentées séparément.

La bibliothèque nécessite PHP 8.3 ou supérieur sur plateforme 64 bits. Son code de production ne dépend ni d’un processus, ni d’un chemin de fichier, ni du réseau, ni de Reader, ni du core. La détection des moteurs natifs et leur priorité avec repli PHP appartiennent à l’adaptateur Reader optionnel.

Limites de ressources et erreurs

Les limites portent sur les octets encodés (dont les données globales JBIG2), les octets décodés, les dimensions, les pixels, les composantes, le travail, les allocations cumulées comptabilisées, l’imbrication, les segments, les métadonnées et les tuiles. Ces bornes sont une politique de l’application, non des restrictions des formats. La comptabilisation des allocations ne remplace pas la limite mémoire du processus PHP hôte.

  • MalformedImage : structure de l’image ou données codées invalides.
  • UnsupportedFeature : mécanisme déclaré que le décodeur choisi ne peut pas représenter ou traiter.
  • ResourceLimit : budget configuré épuisé.

Ne pas réessayer silencieusement une entrée invalide ou un budget épuisé avec des limites plus permissives. Une application peut choisir un autre moteur capable après un résultat explicite de capacité non prise en charge.

Développement

Installer les outils de développement verrouillés avec Composer, puis lancer composer check. Les outils indépendants et les fixtures reproductibles se trouvent dans tools/ et resources/. La qualification d’une version exécute PHP 8.3, 8.4 et 8.5 et les comparaisons applicables avec des encodeurs/décodeurs indépendants.

Les algorithmes adaptés de PDF.js conservent leurs notices Apache-2.0 et leur révision amont exacte dans le registre de provenance de chaque codec. Voir LICENSE et les notices des ressources. Ce package est indépendant du core PDFToolkit sous licence MIT.

Source de ce guide au commit documenté ↗