Как да направите PDF файла сваляем в HTML връзка?

Давам линк към pdf файл на моята уебстраница за изтегляне, както по-долу

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

Проблемът е, че когато потребителят щракне върху тази връзка, тогава

  • Ако потребителят е инсталирал Adobe Acrobat, тогава файлът се отваря в същия прозорец на браузъра в Adobe Reader.
  • Ако Adobe Acrobat не е инсталиран, тогава на потребителя се появява изскачащ прозорец за изтегляне на файла.

Но искам винаги да се появява изскачащ прозорец за изтегляне на файла, независимо дали е инсталиран "Adobe Acrobat" или не.

Моля, кажете ми как мога да направя това?

Решение

Вместо да поставяте връзка към .PDF файла, направете нещо подобно на

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

което извежда персонализирано заглавие, отваря PDF файла (двоично безопасно) и отпечатва данните в браузъра на потребителя, след което той може да избере да запази PDF файла въпреки настройките на браузъра си. PDF_server.php трябва да изглежда по следния начин:

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: и очевидно извършете някои проверки за нормалност на променливата "file", за да предотвратите кражбата на вашите файлове, като например не приемайте файлови разширения, не допускайте наклонени черти, добавете .pdf към стойността

Коментари (12)

Това е ключът:

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

При изпращане на PDF файл се изпраща Content-type application/x-pdf-document или application/pdf. Adobe Reader обикновено задава обслужващ модул за този MIME тип, така че браузърът ще предаде документа на Adobe Reader, когато се получи някой от PDF MIME типовете.

Коментари (0)

В приложение на Ruby on Rails (особено с помощта на нещо като драгоценния камък Prawn и плъгина Prawnto Rails) можете да постигнете това малко по-просто, отколкото с пълен скрипт (като предишния пример с PHP).

В контролера си:

def index

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

Частта render :layout => false указва на браузъра да отвори съобщението "Искате ли да изтеглите този файл? ", вместо да се опита да визуализира PDF файла. След това ще можете нормално да поставите връзка към файла: http://mysite.com/myawesomepdf.pdf

Коментари (3)