Bonjour,

Je souhaite extraire du texte de fichiers PDF existant sur mon disque dur.
Après quelques recherches j'ai vu que le texte présent dans un PDF est compressé selon la méthode de compression DEFLATE.

Heureusement pour moi j'ai vu que je ne devais pas écrire tout l'algorithme de décompression (LZ77 et Codage de HUFFMAN) car LAZARUS (et DELPHI) intégrent déjà ces fonctions.

Ainsi avec pas mal de difficulté j'ai réussi à compresser un STRING en passant par un STREAM. Néanmoins je n'arrive pas à le décompresser. Je n'ai pas d'erreur lors de la compilation mais lors de l'exécution il y a une erreur de Buffer à la ligne : Decompressed.Read (...,...)

Voici le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
  Stream := TMemoryStream.Create;
  Stream.Write (LongueurChaine,SizeOf(LongInt));
  LongueurChaine := Length (String);
  Stream.Write (String[1],LongueurChaine);
 
  Decompressed := TDecompressionStream.Create (Stream);
  Decompressed.Read (LongueurChaine,SizeOf(LongInt));
  SetLength (String2,Stream.Size);
  Decompressed.Read (String2[1],Stream.Size);
  Decompressed.Free;
String est biensur une chaine compressée par CompressionStream.Write
String2 est la chaine de sortie qui normalement devrait être décompressé!!!

Après plein d'essais je n'arrive pas à utiliser cette fonction TDecompressionStream.READ

Merci pour toute aide