txt tutorial parser convertir php pdf decode

tutorial - Extracción de datos de/Filter/FlateDecode secuencia PDF en PHP



pdftotext php tutorial (4)

Como no dijo si necesita acceder a una secuencia descomprimida solamente o si necesita descomprimir todas las secuencias, le sugiero una herramienta de línea de comandos simple que lo haga de una vez para obtener el PDF completo: el qpdf de Jay qpdf .

Ejemplo de línea de comando:

qpdf --qdf --object-streams=disable in.pdf out.pdf

out.pdf se puede inspeccionar en un editor de texto (solo los perfiles ICC integrados, las imágenes y las fuentes podrían ser binarias).

qpdf también reordenará automáticamente los objetos y mostrará la sintaxis de PDF de forma normalizada (y le indicará en un comentario cuál era la identificación de objeto original del objeto descomprimido).

Si necesita volver a comprimir el archivo nuevamente (tal vez después de haberlo editado), simplemente ejecute este comando:

qpdf out-edited.pdf out-recompressed.pdf

(Puede ver un mensaje de advertencia que indique que la utilidad estaba intentando reparar un archivo dañado ...)

qpdf es multiplataforma y está disponible desde Sourceforge .

No puedo descifrar los datos de la transmisión como:

56 0 obj << /Length 1242 /Filter /FlateDecode >> stream x]êΩnƒ Ñ{ûbÀKq¬æ/âê¢....(whole binary is omitted) endstream endobj

Intenté aislar el contenido binario ( x]êΩnƒ Ñ{ûbÀKq¬æ/âê¢.... ) en un archivo y en una cadena binaria. La función de decodificación gzinflate($encripted_data) me envía un error de decodificación, y creo que sucede porque el contenido codificado no está "desinflado" más o menos.

En PDF Reference v 1.7, (seis edición), en la página 67, encontré la descripción del filtro / FlateDecode como: ... Descomprime los datos codificados utilizando el método de compresión zlib / deflate, reproduciendo el texto original o los datos binarios

Necesito una solución cruda real, también conocida como función php y / o algoritmo, qué hacer con esta secuencia "/ FlateDecoded".

¡Gracias!


Hace mucho tiempo, pero alguien podría encontrarlo útil. En este caso: << / Length 1242 / Filter / FlateDecode >> todo lo que necesita es pasar la cadena binaria aislada (así que básicamente todo entre "stream" y "endstream") a zlib.decompress:

import zlib stream = b"êΩnƒ Ñ{ûbÀKq¬æ/âê" # binary stream here data = zlib.decompress(stream) # Here you have your clean decompressed stream

Sin embargo, si tiene / DecodeParms en su objeto PDF, se vuelve complicado. Necesitará el valor de / Predictor y el número de columnas. Mejor usar PyPDF2 para esto.


acabo de usar

import de.intarsys.pdf.filter.FlateFilter;

de jpod / source forge y funciona bien

FlateFilter filter = new FlateFilter(null); byte[] decoded = filter.decode(bytes, start, end - start);

los bytes son directamente del archivo pdf


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

Jingle Bells! Jingle Bells! ...

gzuncompress() - la solución