Ik geef een link van een pdf-bestand op mijn webpagina om te downloaden, zoals hieronder
<a href="myfile.pdf">Download Brochure</a>
Het probleem is wanneer de gebruiker klikt op deze link dan
Maar ik wil dat het altijd pop-up naar de gebruiker om te downloaden, ongeacht "Adobe Acrobat" is geïnstalleerd of niet.
Vertel me alsjeblieft hoe ik dit kan doen?
In plaats van te linken naar het .PDF bestand, doe in plaats daarvan iets als
<a href="pdf_server.php?file=pdffilename">Download my eBook</a>
die een aangepaste header uitvoert, de PDF opent (binair veilig) en de gegevens afdrukt naar de browser van de gebruiker's, dan kunnen ze kiezen om de PDF op te slaan ondanks hun browser instellingen. De pdf_server.php zou er als volgt uit moeten zien:
header("Content-Type: application/octet-stream");
$file = $_GET["file"] .".pdf";
header("Content-Disposition: attachment; filename=" . urlencode($file));
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Description: File Transfer");
header("Content-Length: " . filesize($file));
flush(); // this doesn't really matter.
$fp = fopen($file, "r");
while (!feof($fp))
{
echo fread($fp, 65536);
flush(); // this is essential for large downloads
}
fclose($fp);
PS: en voer natuurlijk een aantal sanity checks uit op de "file" variabele om te voorkomen dat mensen je bestanden stelen, zoals don't accept file extensions, deny slashes, voeg .pdf toe aan de waarde
Dit is de sleutel:
header("Content-Type: application/octet-stream");
Content-type application/x-pdf-document of application/pdf wordt verzonden bij het verzenden van PDF-bestanden. Adobe Reader stelt gewoonlijk de handler voor dit MIME type in, zodat de browser het document aan Adobe Reader zal doorgeven wanneer een van de PDF MIME types wordt ontvangen.
In een Ruby on Rails applicatie (vooral met iets als de Prawn gem en de Prawnto Rails plugin), kun je dit een beetje eenvoudiger bereiken dan een volledig script (zoals het vorige PHP voorbeeld).
In je controller:
def index
respond_to do |format|
format.html # Your HTML view
format.pdf { render :layout => false }
end
end
Het render :layout => false gedeelte vertelt de browser om de "Would you like to download this file?" prompt te openen in plaats van te proberen de PDF te renderen. Dan zou je normaal naar het bestand kunnen linken: http://mysite.com/myawesomepdf.pdf