Je ne peux pas décrypter les données du flux comme:
56 0 obj
<< /Length 1242 /Filter /FlateDecode >>
stream
x]êΩnƒ Ñ{ûbÀKq¬æ\âê¢....(whole binary is omitted)
endstream
endobj
J'ai essayé d'isoler le contenu binaire (x]êΩnƒ Ñ{ûbÀKq¬æ\âê¢....
) Dans un fichier et dans une chaîne binaire. La fonction de décodage gzinflate($encripted_data)
m'envoie une erreur de décodage, et je pense que cela se produit parce que le contenu encodé n'est pas "dégonflé".
Dans PDF Reference v 1.7, (six edition), sur une page 67, j'ai trouvé la description du filtre/FlateDecode comme: ... Décompresse les données encodées à l'aide de zlib/deflate méthode de compression, reproduisant le texte d'origine ou les données binaires
J'ai besoin d'une vraie solution brute, alias fonction php ou/et algorithme, que faire de ce flux "\ FlateDecoded".
Je vous remercie!
header('Content-Type: text'); // I going to download the result of decoding
$n = "binary_file.bin"; // decoded part in file in a directory
$f = @fopen($n, "rb"); // now file is mine
$c = fread($f, filesize($n)); // now I know all about it
$u = @gzuncompress($c); // function, exactly fits for this /FlateDecode filter
$out = fopen("php://output", "wb"); // ready to output anywhere
fwrite($out, $u); // output to downloadable file
Vive le vent! Vive le vent!...
gzuncompress()
- la solution
Puisque vous n'avez pas dit si vous devez accéder à un flux décompressé uniquement ou si vous avez besoin de tous les flux décompressés, je vous proposerai un outil de ligne de commande simple qui le fait en une seule fois pour le PDF complet: qpdf
de Jay Berkenbilt.
Exemple de ligne de commande:
qpdf --qdf --object-streams=disable in.pdf out.pdf
out.pdf
peut ensuite être inspecté dans un éditeur de texte (seuls les profils, images et polices ICC incorporés peuvent toujours être binaires).
qpdf
réorganisera également automatiquement les objets et affichera la syntaxe PDF de manière normalisée (et vous indiquera dans un commentaire quel est l'ID d'objet d'origine de l'objet décompressé) était).
Si vous avez besoin de recompresser le fichier à nouveau (peut-être après l'avoir modifié), exécutez simplement cette commande:
qpdf out-edited.pdf out-recompressed.pdf
(Vous pouvez voir un message d'avertissement indiquant que l'utilitaire tentait de réparer un fichier endommagé ....)
qpdf
est multi-plateforme et disponible auprès de Sourceforge .
Attendu depuis longtemps, mais quelqu'un pourrait le trouver utile. Dans ce cas: <</Longueur 1242/Filtre/FlateDecode >> tout ce dont vous avez besoin est de passer la chaîne binaire isolée (donc fondamentalement tout entre "stream" et "endstream") à zlib.decompress:
import zlib
stream = b"êΩnƒ Ñ{ûbÀKq¬æ\âê" # binary stream here
data = zlib.decompress(stream) # Here you have your clean decompressed stream
Cependant, si vous avez/DecodeParms dans votre objet PDF objet devenu compliqué. Vous aurez besoin de la valeur/Predictor et du nombre de colonnes. Mieux utiliser PyPDF2 pour cela.