php - valido - no puedo abrir archivos pdf en mi pc
Mostrar archivos PDF en el navegador de los usuarios a través de PHP/Perl (5)
Quiero mostrarles 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 solo encontré cómo mostrar el diálogo de salvar 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 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 resultado 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, dímelo. Pero no estoy seguro si mi servidor admite raíles.
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 simple. Mi objetivo principal: rastrear mis archivos pdf y usar algunas direcciones URL extravagantes.
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! :)
La forma más segura de tener una pantalla PDF en lugar de descargar parece estar incrustándola usando un elemento de object
o iframe
. También hay soluciones de terceros como el visor de PDF de Google.
Consulte la mejor forma de insertar 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.
Puede modificar un representador de PDF como xpdf o mostrar para representar en una imagen de gráficos en su servidor, y luego entregar la imagen al usuario. Así es como funciona la vista rápida de archivos PDF de Google, la procesan localmente y luego entregan las imágenes al usuario. No se descargó ningún archivo PDF, y la fuente está bastante oscurecida. :)
Supongo que quiere que el PDF se muestre en el navegador, en lugar de forzar una descarga. Si ese es el caso, intente configurar el encabezado Content-Disposition
con un valor de inline
.
También recuerde 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).
También puede usar la clase fpdf disponible en: http://www.fpdf.org . Da opciones tanto para enviar a un archivo como para mostrarlo en el navegador.
$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 desea que el archivo se descargue en su lugar, reemplace
Content-Disposition: inline
con
Content-Disposition: attachment