126 votes

Afficher un fichier PDF dans le navigateur des utilisateurs via PHP/Perl

Je veux montrer à mes utilisateurs des fichiers PDF. La raison pour laquelle j'utilise un CGI pour afficher le PDF est que je veux suivre les clics pour le PDF, et masquer l'emplacement réel du PDF enregistré.

J'ai fait des recherches sur Internet et je n'ai trouvé que la façon de montrer la boîte de dialogue d'enregistrement aux utilisateurs et de créer un PDF, mais pas de montrer les fichiers aux utilisateurs.

Ce que je voulais, c'est montrer aux utilisateurs mes fichiers PDF, pas créer ou télécharger le PDF.

Voici ce que j'ai obtenu de la documentation officielle de PHP :

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

Aussi mon code perl google-search-result :

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 vous le faites sur ruby, merci de me le dire. Mais je ne suis pas sûr que mon serveur supporte les rails.

Désolé si mon code est trop éloigné de la méthode pour afficher le pdf, puisque je ne connais rien au traitement des pdf et à la mise en œuvre de ce problème.

Supposons que les utilisateurs disposent du plug-in Adobe Reader. Alors, comment résoudre le problème ?

modifier : Je veux afficher un fichier PDF simple. Mon objectif principal est de suivre mes fichiers PDF et d'utiliser quelques urls fantaisistes.

modifier : Voici mon code php principal :

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

modifier : Maintenant le code fonctionne. Mais la barre de progression du chargement (sur le plugin Adobe Reader X) ne s'affiche pas. Pourquoi ? Quelqu'un peut-il m'aider ? Voici mon code 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);
?>

modifier : Tous mes problèmes sont résolus. Voici le code 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);
?>

Merci ! :)

5 votes

La fonction "show" n'est possible que si le client a installé le plug-in Acrobat Reader. Sinon, il sera toujours servi comme un fichier à télécharger, il n'y a rien que vous puissiez faire à ce sujet. Obscurcir le chemin du PDF est également impossible, il est trivial de le découvrir. Qu'est-ce qu'on essaie de faire ? Il existe peut-être des alternatives si nous en savons plus sur vos objectifs.

4 votes

Le plugin Adobe Reader n'est nécessaire que si vous utilisez un navigateur qui ne gère pas les PDF en mode natif. de plus, si le PDF est envoyé au navigateur via PHP/Perl, il est muy Il est possible de masquer le chemin d'accès réel du PDF, ou même de le placer en dehors du répertoire docroot pour qu'il ne soit pas directement accessible.

1 votes

Adobe Reader n'est nécessaire que si l'utilisateur est d'utiliser un navigateur qui ne gère pas les PDF en natif...

-1voto

Il existe une solution simple qui consiste à utiliser le intégrer étiquette :

<span class="fileShow">
  <a href="aa.pdf" onclick="event.stopPropagation();" target="_blank">
    <embed style="width:450px; height:300px; max-width:450px; max-height:300px" src="aa.pdf">
  </a>
</span>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X