Quiero mostrar archivos PDF a mis usuarios. La razón por la que uso cgi para mostrar el pdf es que quiero rastrear los clics del pdf y ocultar la ubicación real del pdf guardado.
He estado buscando en Internet y solo encontré cómo mostrar el cuadro de diálogo de guardado a los usuarios y crear un pdf, no mostrar los archivos a los usuarios.
Lo que quería era mostrar a los usuarios mis archivos pdf, no crear ni 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 resultados 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 de si mi servidor admite rieles.
Lo siento si mi código está demasiado lejos 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 complemento Adobe Reader. Entonces, ¿cómo solucionar mi problema?
editar : Quiero mostrar un archivo pdf sin formato. Mi propósito principal: rastrear mis archivos pdf y usar algunas URL elegantes.
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 está funcionando. Pero la barra de progreso de carga (en el complemento 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! :)
Respuestas:
Supongo que desea que el PDF se muestre en el navegador, en lugar de forzar una descarga. Si ese es el caso, intente configurar el
Content-Disposition
encabezado con un valor deinline
.Recuerde también que esto también se verá afectado por la configuración del navegador: algunos navegadores pueden estar configurados para descargar siempre archivos PDF o abrirlos en una aplicación diferente (por ejemplo, Adobe Reader)
fuente
Probado y funciona bien. Si desea que el archivo se descargue en su lugar, reemplace
con
fuente
Puede modificar un renderizador de PDF como xpdf o evince para convertirlo en una imagen gráfica en su servidor y luego entregar la imagen al usuario. Así es como funciona la vista rápida de archivos PDF de Google , los renderizan localmente y luego entregan imágenes al usuario. No hay ningún archivo PDF descargado y la fuente está bastante oculta. :)
fuente
La forma más segura de tener una pantalla PDF en lugar de descargarla parece ser incrustarla usando un elemento
object
oiframe
. También hay soluciones de terceros como el visor de PDF de Google.Consulte Mejor forma de incrustar PDF en HTML para obtener una descripción general.
También hay DoPDF , un visor de PDF en el navegador basado en Java. No puedo hablar de su calidad, pero parece interesante.
fuente
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.
fuente