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