New question

Question:

Date: 07-07-2017 04:05:39 (In Spanish)

Insertar imagen en PDF creado con FPDF desde MySQL con campo tipo BLOB[Unresolved]

Estoy creando un reporte donde debo insertar la firma, que esta insertada en una base de datos MySQL en un campo tipo blob, tengo todo el reporte listo solo me hace falta insertar esa imagen, ya he intentado cambiando el tipo de campo a varchar e inserto la ruta del archivo, pero quiero intentarlo con el campo tipo blob.

Gracias de antemano.
Tags: Database - FPDF - MySQL - PDF - PHP - PHP Advanced - Question Votes: 0 - Answers: 9 - Views: 21 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 07-07-2017 04:35:45 Bueno para empezar no es una muy buena practica almacenar imagenes directamente en la BD por temas de rendimiento, por otro lado, deberias de guardar ima imagen en un directorio y almacenar la ruta, es más sencillo y bueno sería excelente que dieras mas detalles, como por ejemplo, que libreria estas usando para generar el PDF? por ejemplo   Votes: 0 - Link answer
     
  • Date: 07-07-2017 05:40:31 estoy de acuerdo con el señor carlos quintero es mejor almacenar la ruta donde esta dicha imagen si vas a usar images en base de datos recuerda que debes usar
    header("Content-Type: imagen/jsp"); antes de la impresion de la imagen
      Votes: 1 - Link answer
     
  • Date: 07-07-2017 05:54:21 Hola a todos,

    Aquí un ejemplo de como trabajar con FPDF y su función Image() cuando no se dispone de un archivo físico para enlazar --> Repo GitHub

    Transcribo el ejemplo aquí y dejo mis comentarios/traducciones:
    <?php
    // se carga la extensión 'fpdf'
    require('fpdf.php');
    
    // aquí se carga la imagen en la variable $img, esta porción de código es para "simular" lo que obtendríamos desde la base de datos
    $h_img = fopen('img.jpg', "rb");
    $img = fread($h_img, filesize('img.jpg'));
    fclose($h_img);
    
    // se prepara un base64 encoded "data url"
    $pic = 'data://text/plain;base64,' . base64_encode($img);
    
    // se obtienen las dimensiones de la imagen
    $info = getimagesize($pic);
    
    // se crea un simple documento pdf para ejemplificar la inserción de la imagen:
    $pdf = new FPDF();
    $pdf->AddPage();
    $pdf->SetFont('Arial','B',16);
    $pdf->Cell(40,10,'Hello Image!');
    $pdf->Image($pic, 10, 30, $info[0], $info[1], 'jpg');
    $pdf->Output();
    


    El tema de guardar o no imágenes en la base de datos, no lo veo tan grave si se trata de "firmas", por mi esta ok ese punto (distinto es si se estan guardando imagenes y/o archivos de gran tamaño).

    Saludos a todos y buen código!
      Votes: 1 - Link answer
     
  • Date: 07-07-2017 06:03:11 si bueno al final va a depender el tamaño de la firma creada si fue hecha en alta res o no, de igual manera es mejor tratarlas como archivos externos para cuando necesiten depurar o realizar cambios en la base de datos tendrían menos problemas. Igual es decisión de cada programador. Saludos   Votes: 1 - Link answer
     
  • Date: 07-07-2017 06:18:24 Gracias por su oportuna respuesta, pues en principio la bd ni la tabla donde esta la firma fueron creada por mi, encontre ese tipo de campo para el archivo de la imagen, igual yo cree mi tabla para la firma con un campo varchar para la imagen donde solo guardo la ruta o nombre de la imagen, el archivo en si esta guardado en una carpeta en mi servidor, de igual forma no se si sea la resolución o la extensión de la imagen, igual la pregunta es ¿ Comó inserto esa imagen tipo blob en mi reporte generado con fpdf ultima version tengo algo como $fpd->image($variable['archivo'],20,20,'C'); imprime caracteres y no la imagen.

    Gracias de ante mano.
      Votes: 0 - Link answer
     
  • Date: 07-07-2017 06:50:52 Marlon, relee mi respuesta anterior y veras que ahí está la respuesta (lo haces por medio de un base64 encoded "data url"), saludos   Votes: 0 - Link answer
     
  • Date: 07-07-2017 07:38:09 Sr Fernando este es el error que me sale a la hora de ejecutar su script

    ERROR:
    <br />
    <b>Warning</b>:  fopen() expects parameter 1 to be a valid path, array given in <b>C:\xampp\htdocs\CBL2018\a_Imagenologia\reporteLectura.php</b> on line <b>15</b><br />
    <br />
    <b>Warning</b>:  filesize() expects parameter 1 to be a valid path, string given in <b>C:\xampp\htdocs\CBL2018\a_Imagenologia\reporteLectura.php</b> on line <b>16</b><br />
    <br />
    <b>Warning</b>:  fread() expects parameter 1 to be resource, boolean given in <b>C:\xampp\htdocs\CBL2018\a_Imagenologia\reporteLectura.php</b> on line <b>16</b><br />
    <br />
    <b>Warning</b>:  fclose() expects parameter 1 to be resource, boolean given in <b>C:\xampp\htdocs\CBL2018\a_Imagenologia\reporteLectura.php</b> on line <b>17</b><br />
    <br />
    <b>Notice</b>:  getimagesize(): Read error! in <b>C:\xampp\htdocs\CBL2018\a_Imagenologia\reporteLectura.php</b> on line <b>19</b><br />
    <br />
    <b>Fatal error</b>:  Uncaught exception 'Exception' with message 'FPDF error: Image file has no extension and no type was specified: data://text/´lain;base64,' in C:\xampp\htdocs\CBL2018\fpdf\fpdf.php:271
    Stack trace:
    #0 C:\xampp\htdocs\CBL2018\fpdf\fpdf.php(876): FPDF-&gt;Error('Image file has ...')
    #1 C:\xampp\htdocs\CBL2018\a_Imagenologia\reporteLectura.php(28): FPDF-&gt;Image('data://text/\xC2\xB4l...', 20, 20, 'C')
    #2 {main}
      thrown in <b>C:\xampp\htdocs\CBL2018\fpdf\fpdf.php</b> on line <b>271</b><br />
    


    CÓDIGO:
    while ($remim = mysql_fetch_assoc($coim)){
        
    $h_img = fopen($remin=['firma'], "rb");
    $img = fread($h_img, filesize($remim['firma']));   
    fclose($h_img); 
    $pic = 'data://text/´lain;base64,'.base64_encode($img);
    $info = getimagesize($pic);
    
    $pdf = new FPDF();
    $pdf->AddPage();
    $pdf->SetFont('Arial','B',8);
    $pdf->SetFillColor(255,255,255);
    
    $pdf->Image($pic,20,20,'C');
    
    ob_end_clean();
    $pdf->Output();
    
    }
    
      Votes: 0 - Link answer
     
  • Date: 07-07-2017 08:27:16 Hola Marlon, observa que en el ejemplo fopen() abre un archivo de disco (esto es una emulación de obtener el blob desde la base de datos).

    Veamos, según las modificaciones de código que has hecho al ejemplo voy a tratar de ajustarlo para que te funcione, y aclaro que asumo que la firma (obtenida de la base de datos) esta dentro del array $remim['firma'] o $remin['firma'] (ojo que en un momento lo escribres con M final y en otro con N, voy a asumir que la forma correcta es $remim['firma'], a lo sumo tu despues lo cambias).

    //CODIGO
    while ($remim = mysql_fetch_assoc($coim)){
    
    $pic = 'data://text/plain;base64,'.base64_encode($remim['firma']));
    $info = getimagesize($pic);
    
    $pdf = new FPDF();
    $pdf->AddPage();
    $pdf->SetFont('Arial','B',8);
    $pdf->SetFillColor(255,255,255);
    
    $pdf->Image($pic,20,20,'C');
    
    ob_end_clean();
    $pdf->Output();
    }
    


    En tu código modificado también has cambiado "plain" por "´lain", ojo, se te remplazo una letra, y también en otra parte hacer algo como $remin=['firma'], asumo que el "=" es otro error....

    Prueba y luego nos cuentas.

    Saludos y buen código!

    PD: veo también que utlizas el conector obsoleto/deprecated para operar con MySQL, deberás migrar a MySQLi (pero esto ya es otro tema, revisa en la comunidad que se ha hablado mucho al respecto).
      Votes: 0 - Link answer
     
  • Date: 10-11-2017 11:37:47 Buen día caballeros.
    Señor Fernando Mosquera.
    El código que compartiste funciona, pero cuando se tiene la imagen contenida en alguna carpeta, no en la base de datos.
      Votes: 0 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In
 
frjcbbae garagebible.com