123 votos

Mostrar un archivo PDF en el navegador de los usuarios a través de PHP/Perl

Quiero mostrar a mis usuarios archivos PDF. La razón por la que uso cgi para mostrar el pdf es que quiero rastrear los clics para el pdf, y ocultar la ubicación real del pdf guardado.

He estado buscando en Internet y sólo he encontrado cómo mostrar el diálogo de guardar a los usuarios y crear un pdf, no mostrar los archivos a los usuarios.

Lo que quería es mostrar los usuarios mis archivos pdf, no crear o descargar el pdf. Esto es lo que obtuve de la documentación oficial de PHP:

<?php
header('Content-type: application/pdf');
readfile('the.pdf');
?>

También mi código Perl de búsqueda de Google:

open(PDF, "the.pdf") or die "could not open PDF [$!]";
binmode PDF;
my $output = do { local $/; <PDF> };
close (PDF);

print "Content-Type: application/pdf\n";
print "Content-Length: " .length($output) . "\n\n";
print $output

si lo haces en Ruby, por favor, dímelo. Pero no estoy seguro si mi servidor soporta Rails.

Disculpen si mi código se aleja demasiado del método para mostrar el pdf, ya que no sé nada sobre el procesamiento de pdf y cómo implementar este problema.

Supongamos que los usuarios tienen el plug-in de Adobe Reader. Entonces, ¿cómo solucionar mi problema?

editar : Quiero mostrar un archivo pdf simple. Mi propósito principal: rastrear mis archivos pdf y utilizar algunas urls de lujo.

editar : Aquí está mi código PHP principal:

<?php
$file='/files/the.pdf';
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="the.pdf"');
@readfile($file);
?>

editar : Ahora el código funciona. Pero la barra de progreso de carga (en el plugin de Adobe Reader X) no aparece. ¿Por qué? ¿Alguien puede ayudarme? Aquí está mi código principal:

<?php
$file='./files/the.pdf';
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="the.pdf"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
@readfile($file);
?>

editar : Todos mis problemas resueltos. Aquí está el código final:

<?php
$file = './path/to/the.pdf';
$filename = 'Custom file name for the.pdf'; /* Note: Always use .pdf at the end. */

header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="' . $filename . '"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
header('Accept-Ranges: bytes');

@readfile($file);
?>

¡Gracias! :)

49voto

Stephen Puntos 5339

Supongo que quieres que el PDF se muestre en el navegador, en lugar de forzar una descarga. Si ese es el caso, pruebe a configurar la opción Content-Disposition con un valor de inline .

Recuerde también que esto se verá afectado por la configuración del navegador: algunos navegadores pueden estar configurados para siempre descargar archivos PDF o abrirlos en una aplicación diferente (por ejemplo, Adobe Reader)

18voto

Karim Puntos 161
    $url ="https://yourFile.pdf";
    $content = file_get_contents($url);

    header('Content-Type: application/pdf');
    header('Content-Length: ' . strlen($content));
    header('Content-Disposition: inline; filename="YourFileName.pdf"');
    header('Cache-Control: private, max-age=0, must-revalidate');
    header('Pragma: public');
    ini_set('zlib.output_compression','0');

    die($content);

Probado y funciona bien. Si quieres que el archivo se descargue en su lugar, sustituye

    Content-Disposition: inline

con

    Content-Disposition: attachment

4voto

sarnold Puntos 62720

Podría modificar un renderizador de PDF como xpdf o evince para que se convierta en una imagen gráfica en su servidor, y luego entregar la imagen al usuario. Así es como el programa de Google vista rápida de los archivos PDF funciona, lo renderizan localmente y luego entregan las imágenes al usuario. No hay archivo PDF descargado, y la fuente está bastante bien oculta. :)

1voto

Pekka 웃 Puntos 249607

La forma más segura de hacer que un PDF se muestre en lugar de descargarse parece ser incrustarlo utilizando un object o iframe elemento. También hay soluciones de terceros como el visor de PDF de Google.

Ver La mejor manera de incrustar un PDF en HTML para obtener una visión general.

También hay DoPDF un visor de PDF basado en Java para el navegador. No puedo hablar de su calidad pero parece interesante.

0voto

Tapan Anand Puntos 28

También puede utilizar la clase fpdf disponible en: http://www.fpdf.org . Ofrece opciones tanto para la salida a un archivo como para la visualización en el navegador.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X