Prise en charge de la compression LZW

Vue d’ensemble

HotPDF inclut désormais une prise en charge complète de la compression LZW (Lempel-Ziv-Welch) pour les flux PDF LZW est un algorithme de compression de données sans perte particulièrement efficace pour le texte et les graphiques simples, couramment utilisé dans les documents PDF pour la compression des flux de contenu

Fonctionnalités clés

  • Prise en charge complète de la décompression LZW pour les flux PDF
  • Prise en charge configurable des prédicteurs pour une compression améliorée
  • Plusieurs options d’ordre de remplissage (de haut en bas, de bas en haut)
  • Prise en charge du changement de code anticipé pour la compatibilité
  • Traitement des flux économe en mémoire
  • Intégration des paramètres PDF (Predictor, Colors, BitsPerComponent, Columns)

Implémentation technique

La prise en charge de la compression LZW est implémentée dans l’unité HPDFLZW.pas, qui fournit:

  • TPDFLZWDecompressor: Classe principale de décompression
  • TPDFLZWParms: Structure de paramètres pour les réglages spécifiques au PDF
  • TPDFLZWFillOrder: Énumération pour le traitement de l’ordre des bits

Référence de classe

TPDFLZWDecompressor

Classe principale pour les opérations de décompression LZW

Propriétés :

  • FillOrder: Spécifie l’ordre des bits (foBottom, foTop)
  • EarlyChange: Contrôle les changements précoces de taille de code
  • InitialCodeSize: Taille de code initiale pour la décompression

Méthodes :

  • Decompress(Input: AnsiString): AnsiString - Décompression de base
  • Decompress(Input: AnsiString; Parms: TPDFLZWParms): AnsiString - Décompression avec paramètres PDF

Exemples d'utilisation

Décompression LZW de base


// Delphi example - Basic LZW decompression
procedure DecompressLZWData;
var
  Decompressor: TPDFLZWDecompressor;
  CompressedData: AnsiString;
  DecompressedData: AnsiString;
begin
  Decompressor := TPDFLZWDecompressor.Create;
  try
    // Configure decompressor
    Decompressor.FillOrder := foTop;
    Decompressor.EarlyChange := True;
    Decompressor.InitialCodeSize := 9;

    // Decompress data
    DecompressedData := Decompressor.Decompress(CompressedData);

    // Use decompressed data
    ProcessDecompressedData(DecompressedData);
  finally
    Decompressor.Free;
  end;
end;
        

Décompression LZW avancée avec paramètres PDF


// Delphi example - Advanced LZW decompression with PDF parameters
procedure DecompressLZWWithParms;
var
  Decompressor: TPDFLZWDecompressor;
  CompressedData: AnsiString;
  DecompressedData: AnsiString;
  Parms: TPDFLZWParms;
begin
  Decompressor := TPDFLZWDecompressor.Create;
  try
    // Configure PDF parameters
    Parms.Predictor := 2;           // Horizontal differencing predictor
    Parms.Colors := 3;              // RGB color space
    Parms.BitsPerComponent := 8;    // 8 bits per component
    Parms.Columns := 100;           // Image width in pixels
    Parms.ExpandedTo8Bit := True;   // Expand to 8-bit components
    Parms.ColorSpace := 'DeviceRGB';

    // Decompress with parameters
    DecompressedData := Decompressor.Decompress(CompressedData, Parms);

    // Process the decompressed image data
    ProcessImageData(DecompressedData, Parms);
  finally
    Decompressor.Free;
  end;
end;
        

Prise en charge des paramètres PDF

Structure TPDFLZWParms

  • Predictor: Fonction de prédicteur (0=aucun, 2=différenciation horizontale)
  • Colors: Nombre de composantes de couleur (1=niveaux de gris, 3=RGB, 4=CMYK)
  • BitsPerComponent: Nombre de bits par composante de couleur (1, 2, 4, 8, 16)
  • Columns: Nombre d'échantillons par ligne
  • ExpandedTo8Bit: Indique s'il faut étendre aux composants 8 bits
  • ColorSpace: Identifiant de l'espace colorimétrique

Détails de l'algorithme

L'implémentation LZW inclut :

  • Compression à base de dictionnaire: Construit et maintient un dictionnaire dynamique
  • Longueur de code variable: Prend en charge des longueurs de code de 9 à 12 bits
  • Gestion du code d'effacement: Gestion correcte des codes d'effacement et de fin d'information
  • Gestion de la table de chaînes: Table de chaînes efficace pour la reconnaissance de motifs

Caractéristiques de performance

  • Efficace en mémoire: Optimisé pour les flux de données volumineux
  • Décompression rapide: Algorithmes de décompression hautement optimisés
  • Performances prévisibles: Performances constantes sur différents types de données
  • Faible empreinte mémoire: Faible surcharge mémoire pendant le traitement

Cas d'utilisation courants

  • Décompression des flux de contenu PDF
  • Décompression des données d'image dans les fichiers PDF
  • Décompression des flux de texte
  • Décompression des données de formulaire
  • Décompression des flux PostScript

Gestion des erreurs

Le décompresseur LZW inclut une gestion robuste des erreurs pour :

  • Séquences de codes invalides
  • Flux de données corrompus
  • Échecs d'allocation mémoire
  • Conditions de dépassement du dictionnaire

Conformité aux normes

  • Conformité au filtre LZWDecode de PDF 1.2+
  • Compatibilité LZW de PostScript Level 2
  • Compatibilité avec la compression LZW TIFF
  • Compatibilité avec l'implémentation LZW d'Adobe

Voir aussi