Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   Abrir PDF desde PHP (https://www.clubdelphi.com/foros/showthread.php?t=21189)

asirvent 10-05-2005 10:44:59

Abrir PDF desde PHP
 
Hola, tengo un fichero PDF, almacenado en un campo de una tabla de Firebird, ahora bien, necesito poder mostrar el fichero pdf que se encuentra almacenado en ese campo utilizando PHP, ¿como lo hago?

un saludo

kayetano 11-05-2005 09:49:25

Hola

Supongo que algo asin:
Código PHP:

       header"Content-type: application/pdf" );
        
header"Content-Length: $len");
        
header"Content-Disposition: inline; filename=nombre.pdf" );
        echo 
$contenido

$contenido es el valor que tienes guardado en la tabla (archivo PDF).
$len es el tamaño del archivo.

Lo pongo de memoria por lo que igual me equivoco en algo, pero seguro que si no es asín es muy parecido.

asirvent 17-05-2005 12:03:20

Hola, he probado lo que me comentas y mi pagina queda como:

<?php
$cfgProgDir = 'phpSecurePages/';
include($cfgProgDir . "secure.php");

$dbh1 = ibase_pconnect ($cfgDbDatabase, $cfgServerUser, $cfgServerPassword);
$stmt1 = "select ap_pdf from albaran_pdf ";
$stmt1 = $stmt1."where em_codigo='1' and s_codigo='O' and a_codigo=14035";
$sth1 = ibase_query ($dbh1, $stmt1);
$row1 = ibase_fetch_object ($sth1);

$len = filesize($row1->AP_PDF);
header("Content-type: application/pdf");
header("Content-Length: $len");
header("Content-Disposition: inline; filename=albaran.pdf");
echo $row1->AP_PDF;
?>

Bien el caso es que al cargar esta pagina obtengo unicamente unos codigos extraños que supongo seran el pdf, pero no me muestra el pdf.

¿que falta o que puede haber mal?

gracias de antemano.

un saludo

asirvent 18-05-2005 19:15:44

Hola, me autorespondo yo mismo.

Tengo parte del problema solucionado utilizando:

$len = filesize(ibase_blob_echo($row1->AP_PDF));
header( "Content-type: application/pdf" );
header( "Content-Length: $len");
header( "Content-Disposition: inline; filename=nombre.pdf" );
ibase_blob_echo ($row1->AP_PDF);

El problema que tenia es que el registro $row->AP_PDF que era de tipo blob no lo trataba como tal,al utilizar la instruccion ibase_blob_echo (mostrar blob de interbase), esto genera abre el pdf de la BD y lo abre para guardar pero no me pone el nombre que yo le indico "nombre.pdf", sino el nombre de la pagina php "albaranpdf.php".

Mi pregunta ahora es por una parte, ¿porque no le pone de nombre "nombre.pdf"?, y ¿porque no lo muestra en pantalla?

un saludo

asirvent 20-05-2005 12:04:29

Para acabar, me vuelvo a responder yo mismo.

Para poder mostrar el fichero en pantalla correctamente, al final lo he tenido que guardar temporalmente y posteriormente cargarlo, me ha quedado así:

$dbh1 = ibase_pconnect ($cfgDbDatabase, $cfgServerUser, $cfgServerPassword);
$stmt1 = "select ap_pdf from albaran_pdf ";
$stmt1 = $stmt1."where em_codigo='1' and s_codigo='O' and a_codigo=14035";
$sth1 = ibase_query ($dbh1, $stmt1);
$row1 = ibase_fetch_object ($sth1);
$blob_data = ibase_blob_info($row1->AP_PDF);
$blob_hndl = ibase_blob_open($row1->AP_PDF);

$nombre_archivo = 'albaran.pdf';
$contenido = ibase_blob_get($blob_hndl, $blob_data[0]);

if (!$gestor = fopen($nombre_archivo, 'w+')) {
echo "No se puede abrir el archivo ($nombre_archivo)";
exit;
}

// Escribir $contenido a nuestro arcivo abierto.
if (fwrite($gestor, $contenido) === FALSE) {
echo "No se puede escribir al archivo ($nombre_archivo)";
exit;
}

fclose($gestor);
ibase_blob_close($blob_hndl);

$filepa='albaran.pdf';
header('Content-type: application/pdf');
header("Pragma: public");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header('Content-Length: ' . filesize($filepa));
readfile ($filepa);

Con esto ya funciona correctamente.

un saludo

kayetano 23-05-2005 13:25:18

Hola

Yo no he trabajado nunca con interbase por lo que no puedo opinar mucho sobre tu solución, pero con MySQL y las cabeceras que te puse al principio funciona.
Me apunto tu solucion por si acaso.


La franja horaria es GMT +2. Ahora son las 03:33:23.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi