Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] PDF corrupto

Estas en el tema de PDF corrupto en el foro de PHP en Foros del Web. Hola a todos!!! Es un placer estar por aqui con vosotros compartiendo conocimientos y resolviendo dudas. Iré al grano. Mi problema basicamente consiste en: - ...
  #1 (permalink)  
Antiguo 05/09/2014, 04:51
 
Fecha de Ingreso: septiembre-2014
Mensajes: 2
Antigüedad: 9 años, 7 meses
Puntos: 0
PDF corrupto

Hola a todos!!!

Es un placer estar por aqui con vosotros compartiendo conocimientos y resolviendo dudas. Iré al grano.

Mi problema basicamente consiste en:

- creo un pdf con la librería ezPdf de PHP
- la codifico en base64
- la almaceno en base de datos en un campo text.

en otra pagina

- recupero el string y lo decodifico.
- al abrir el pdf me dice que esta corrupto.

Bueno antes de empezar a poner codigo dire un par de cosas que creo que son necesarias saber.

1º- no puedo cambiar de libreria para crear el pdf.
2º- el pdf contiene además de texto una imagen incrustada (una firma que se mete desde un pad de teclado de tablet).
3º- la aplicacion corre en local.
4º- el campo de base de datos ya se que debería ser BLOB pero no puedo cambiarlo tampoco.

Una vez dicho todo esto os pondre basicamente el codigo que ahora mismo hay en la app.

archivo1.php

Cita:
$pdfcode = $myPdf->ezOutput();
$d = date("YmdHis_");
header('Content-type: application/pdf');
$fp=fopen('../pdf/tmp/' . $d . 'pdfTmp.pdf','wb');
fwrite($fp,$pdfcode);
fclose($fp);
$nombre_temporal= '../img/tmp/' . $d . 'pdfTmp.pdf';
$data = base64_encode(file_get_contents($nombre_temporal)) ;

$data_ticket = array(
'contador_ng' => $id,
'pdf' => $data
);

$ret = $ng->updateTable('insert', 'lg_ng_pdf', $data_ticket);
Hasta aqui el pdf que se genera se abre sin problemas y el contenido es todo correcto pero al ser un archivo temporal se eliminara en cualquier momento.

archivo2.php
Cita:
$d = date("YmdHis_");
$dir_tmp = "../img/tmp/";

$data = base64_decode($row['pdf']);
$file = $dir_tmp . $d . 'pdfTmp.pdf';
file_put_contents($file, $data);
return $file;
cuando abro este nuevo archivo el pdf me sale como corrupto.

La verdad es que ya he probado mil cosas, añadir mas cabeceras, menos cabeceras, usar funciones distintas, distintas codificaciones... y el resultado siempre es el mismo.

Espero podais hecharme un cable con este problema y de paso si le sirve a alguien mas pues perfecto.

Desde ya muchas gracias y un saludo!!!
die();
  #2 (permalink)  
Antiguo 05/09/2014, 07:18
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: PDF corrupto

Creo que en tu código no estás leyendo el archivo correcto, o es más, ni siquiera es necesario el archivo temporal.

Código PHP:
Ver original
  1. $fp=fopen('../pdf/tmp/' . $d . 'pdfTmp.pdf','wb');
  2. fwrite($fp,$pdfcode);
  3. fclose($fp);
  4.  
  5. // ya tienes el contenido del PDF en $pdfcode ¿cierto?
  6. $data = $pdfcode;
  7.  
  8. // ¿entonces para que lees un archivo dentro de otra carpeta?
  9. // porque ../pdf/tmp no es lo mismo que ../img/tmp
  10. $nombre_temporal= '../img/tmp/' . $d . 'pdfTmp.pdf';
  11. $data = base64_encode(file_get_contents($nombre_temporal)) ;
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 08/09/2014, 02:53
 
Fecha de Ingreso: septiembre-2014
Mensajes: 2
Antigüedad: 9 años, 7 meses
Puntos: 0
Respuesta: PDF corrupto

Hola pateketrueke

Gracias por responder y siento que yo haya tardado tanto... u_U

Es cierto lo que me comentas de las rutas pero eso fue un fallo mio al escribirlo :S lo comprobé y no era ese el problema. Me mire el codigo que me pusiste ya que si que vi que el codigo mio era un poco redundante.

Finalmente hoy he sacado cual era el problema. Los strings en base64 que se generan rondan minimo los 10000 caracteres (en mi caso) y en el php.ini tenia puesto el limite a 4096 a la hora de recuperar el string de base de datos. Al modificar el php.ini asunto solucionado.

Pongo aqui que líneas cambié por si a alguien le puede ir bien.

Cita:
ANTES
; Valid range 0 - 2147483647. Default = 4096.
;mssql.textlimit = 4096

; Valid range 0 - 2147483647. Default = 4096.
;mssql.textsize = 4096

AHORA
; Valid range 0 - 2147483647. Default = 4096.
mssql.textlimit = 2147483647

; Valid range 0 - 2147483647. Default = 4096.
mssql.textsize = 2147483647

Un saludo y repite que muchas gracias por el tiempo dedicado en mi problema :D
  #4 (permalink)  
Antiguo 08/09/2014, 05:44
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: PDF corrupto

Deberias de guardar el texto en un campo Blob, para poder recuperarlo de forma mas sencilla...

Etiquetas: pdf
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:57.