PDF dosyasını HTML bağlantısında nasıl indirilebilir hale getirebilirim?

İndirmek için web sayfamda aşağıdaki gibi bir pdf dosyasının bağlantısını veriyorum

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

Sorun, kullanıcı bu bağlantıya tıkladığında

  • Kullanıcı Adobe Acrobat'ı yüklediyse, dosyayı Adobe Reader'da aynı tarayıcı penceresinde açar.
  • Adobe Acrobat yüklü değilse, dosyayı indirmek için kullanıcıya açılır.

Ancak, "Adobe acrobat" yüklü olup olmadığına bakılmaksızın, kullanıcıya her zaman indirme için açılmasını istiyorum.

Lütfen bana bunu nasıl yapabileceğimi söyleyin?

Çözüm

.PDF dosyasına bağlantı vermek yerine şöyle bir şey yapın

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

Özel bir başlık çıkarır, PDF'yi açar (ikili güvenli) ve verileri kullanıcının tarayıcısına yazdırır, ardından tarayıcı ayarlarına rağmen PDF'yi kaydetmeyi seçebilirler. pdf_server.php bu şekilde görünmelidir:

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); 

Not: ve tabii ki insanların dosyalarınızı çalmasını önlemek için "file" değişkeninde dosya uzantılarını kabul etme, eğik çizgileri reddetme, değere .pdf ekleme gibi bazı akıl sağlığı kontrolleri yapın

Yorumlar (12)

Anahtar bu:

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

PDF dosyası gönderilirken content-type application/x-pdf-document veya application/pdf gönderilir. Adobe Reader genellikle bu MIME türü için işleyiciyi ayarlar, böylece PDF MIME türlerinden herhangi biri alındığında tarayıcı belgeyi Adobe Reader'a iletir.

Yorumlar (0)

Bir Ruby on Rails uygulamasında (özellikle Prawn gem ve Prawnto Rails eklentisi gibi bir şeyle), bunu tam bir betikten (önceki PHP örneği gibi) biraz daha basit bir şekilde gerçekleştirebilirsiniz.

Kontrolörünüzde:

def index

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

render :layout => false kısmı tarayıcıya PDF'yi oluşturmaya çalışmak yerine "Bu dosyayı indirmek ister misiniz? " istemini açmasını söyler. Böylece dosyaya normal şekilde bağlantı verebilirsiniz: http://mysite.com/myawesomepdf.pdf

Yorumlar (3)