PDA

Ver la Versión Completa : Abrir PDF desde PHP


asirvent
10-05-2005, 11:44:59
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, 10:49:25
Hola

Supongo que algo asin:

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, 13: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, 20: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, 13: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, 14: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.