Hvordan gjøre PDF-filen nedlastbar i HTML-lenke?

Jeg gir lenke til en pdf-fil på websiden min for nedlasting, som nedenfor

<a href="myfile.pdf">Download Brochure</a>

Problemet er når brukeren klikker på denne lenken da

  • Hvis brukeren har installert Adobe Acrobat, åpnes filen i samme nettleservindu i Adobe Reader.
  • Hvis Adobe Acrobat ikke er installert, dukker det opp en melding til brukeren om å laste ned filen.

Men jeg vil at det alltid skal dukke opp til brukeren for nedlasting, uavhengig av om "Adobe Acrobat" er installert eller ikke.

Vennligst fortell meg hvordan jeg kan gjøre dette?

Løsning

I stedet for å lenke til .pdf-filen, kan du i stedet gjøre noe som dette

<a href="pdf_server.php?file=pdffilename">Download my eBook</a>

som skriver ut en egendefinert topptekst, åpner PDF-filen (binær safe) og skriver ut dataene til brukerens nettleser, så kan de velge å lagre PDF-filen til tross for nettleserinnstillingene. pdf_server.php skal se slik ut:

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: og kjør åpenbart noen fornuftskontroller på variabelen "file" for å forhindre at folk stjeler filene dine, for eksempel ikke godta filendelser, nekte skråstreker, legge til .pdf i verdien

Kommentarer (12)

Dette er nøkkelen:

header("Content-Type: application/octet-stream");

Content-type application/x-pdf-document eller application/pdf sendes ved sending av PDF-fil. Adobe Reader setter vanligvis handleren for denne MIME-typen, slik at nettleseren sender dokumentet til Adobe Reader når noen av PDF MIME-typene mottas.

Kommentarer (0)

I en Ruby on Rails-applikasjon (spesielt med noe som Prawn gem og Prawnto Rails-plugin), kan du oppnå dette litt enklere enn et fullverdig skript (som det forrige PHP-eksemplet).

I kontrolleren din:

def index

 respond_to do |format|
   format.html # Your HTML view
   format.pdf { render :layout => false }
 end
end

Delen render :layout => false forteller nettleseren at den skal åpne spørringen "Vil du laste ned denne filen?" i stedet for å prøve å gjengi PDF-filen. Da vil du kunne lenke til filen på vanlig måte: http://mysite.com/myawesomepdf.pdf

Kommentarer (3)