|
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
|