Jak zrobić plik PDF do pobrania w HTML link?
Podaję link do pliku pdf na mojej stronie do pobrania, jak poniżej
<a href="myfile.pdf">Download Brochure</a>
Problem polega na tym, że gdy użytkownik kliknie ten link to
- Jeśli Użytkownik ma zainstalowany program Adobe Acrobat, otwiera plik w tym samym oknie przeglądarki w programie Adobe Reader.
- Jeśli Adobe Acrobat nie jest zainstalowany, to wyskakuje do użytkownika w celu pobrania pliku.
Ale chcę, aby zawsze wyskakiwał do użytkownika do pobrania, niezależnie od" Adobe acrobat " jest zainstalowany lub nie.
Proszę, powiedz mi, Jak mogę to zrobić?12 answers
Zamiast linkowania do .Plik PDF, zamiast tego zrób coś w stylu
<a href="pdf_server.php?file=pdffilename">Download my eBook</a>
Który wyświetla niestandardowy nagłówek, otwiera plik PDF (binary safe) i drukuje DANE do przeglądarki użytkownika, a następnie może wybrać zapisanie pliku PDF pomimo ustawień przeglądarki. Pdf_server.php powinno wyglądać tak:
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: i oczywiście Uruchom kilka sprawdzeń rozsądku w zmiennej "file", aby zapobiec kradzieży plików, takich jak nie Akceptuj rozszerzeń plików, Odrzuć ukośniki, dodaj .pdf do wartość
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-30 18:27:02
Jest to częsty problem, ale niewiele osób wie, że istnieje proste rozwiązanie HTML 5:
<a href="./directory/yourfile.pdf" download="newfilename">Download the pdf</a>
Gdzie {[2] } jest sugerowaną nazwą pliku dla użytkownika do zapisania pliku. Lub domyślna nazwa pliku na serwerze, jeśli zostawisz ją pustą, w następujący sposób:
<a href="./directory/yourfile.pdf" download>Download the pdf</a>
Kompatybilność: testowałem to na Firefoksie 21 i żelazku, oba działały dobrze. Może nie działać w przeglądarkach niezgodnych z HTML5 lub przestarzałych. Jedyną przeglądarką, którą testowałem, która nie wymusza pobierania jest IE...
Sprawdź zgodność tutaj: http://caniuse.com/#feat=download
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-02 15:37:34
Nie pętla przez każdą linię pliku. Użyj readfile zamiast tego, jest szybszy. To jest poza stroną php: http://php.net/manual/en/function.readfile.php
$file = $_GET["file"];
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header("Content-Type: application/force-download");
header('Content-Disposition: attachment; filename=' . urlencode(basename($file)));
// header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
Upewnij się, że dezaktywujesz zmienną get, ponieważ ktoś może pobrać kilka plików php...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-14 13:35:59
Zamiast używać skryptu PHP, aby odczytać i spłukać plik, lepiej jest przepisać nagłówek za pomocą .htaccess
. Spowoduje to zachowanie "ładnego" adresu URL (myfile.pdf
zamiast download.php?myfile
).
<FilesMatch "\.pdf$">
ForceType applicaton/octet-stream
Header set Content-Disposition attachment
</FilesMatch>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-26 09:16:24
Znalazłem sposób, aby to zrobić za pomocą zwykłego starego HTML i JavaScript / jQuery, które degradują wdzięcznie. Testowane w IE7-10, Safari, Chrome i FF:
HTML do pobrania link:
<p>Thanks for downloading! If your download doesn't start shortly,
<a id="downloadLink" href="...yourpdf.pdf" target="_blank"
type="application/octet-stream" download="yourpdf.pdf">click here</a>.</p>
JQuery (czysty kod JavaScript byłby bardziej wyrazisty), który symuluje klikanie w link po małym opóźnieniu:
var delay = 3000;
window.setTimeout(function(){$('#downloadLink')[0].click();},delay);
Aby uczynić to bardziej wytrzymałym, możesz dodać wykrywanie funkcji HTML5, a jeśli jej nie ma, Użyj window.open()
, aby otworzyć nowe okno z plikiem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-20 20:58:26
To jest klucz:
header("Content-Type: application/octet-stream");
Content-type application / x-pdf-document lub application/pdf jest wysyłany podczas wysyłania pliku PDF. Program Adobe Reader zazwyczaj ustawia obsługę tego typu MIME, aby przeglądarka przekazywała dokument do programu Adobe Reader po otrzymaniu dowolnego z typów MIME PDF.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-13 07:27:19
Jest łatwiejszy sposób w HTML5: Dodaj atrybut Download
.
Jest obsługiwany przez większość nowoczesnych przeglądarek.
<a download href="file.pdf">Download PDF</a>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-05 05:52:29
Wiem, że jestem bardzo późno, aby odpowiedzieć na to, ale znalazłem hack to zrobić w javascript.
function downloadFile(src){
var link=document.createElement('a');
document.body.appendChild(link);
link.href= src;
link.download = '';
link.click();
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-24 18:48:24
Spróbuj tego:
<a href="pdf_server_with_path.php?file=pdffilename&path=http://myurl.com/mypath/">Download my eBook</a>
Kod w pdf_server_with_path.php to:
header("Content-Type: application/octet-stream");
$file = $_GET["file"] .".pdf";
$path = $_GET["path"];
$fullfile = $path.$file;
header("Content-Disposition: attachment; filename=" . Urlencode($file));
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Description: File Transfer");
header("Content-Length: " . Filesize($fullfile));
flush(); // this doesn't really matter.
$fp = fopen($fullfile, "r");
while (!feof($fp))
{
echo fread($fp, 65536);
flush(); // this is essential for large downloads
}
fclose($fp);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-19 22:14:50
Oto inne podejście. Wolę zamiast polegać na obsłudze przeglądarki, lub zająć się tym w warstwie aplikacji, używać logiki serwera www.
Jeśli używasz Apache, i można umieścić an .plik htaccess w odpowiednim katalogu możesz użyć poniższego kodu. Oczywiście możesz umieścić to w httpd.conf jak również, jeśli masz dostęp do tego.
<FilesMatch "\.(?i:pdf)$">
Header set Content-Disposition attachment
</FilesMatch>
Dyrektywa FilesMatch jest tylko wyrażeniem regularnym, więc może być ustawiona tak szczegółowo, jak chcesz, lub możesz dodać inne rozszerzenia.
Linia nagłówka robi to samo, co pierwsza linia w skryptach PHP powyżej. Jeśli chcesz również ustawić wiersze typu treści, możesz to zrobić w ten sam sposób, ale nie uznałem tego za konieczne.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-29 16:52:53
Mój rozwiązałem używając całego adresu url pliku PDF (zamiast po prostu umieszczać nazwę pliku lub lokalizację w href): a href= " domena . com / pdf / nazwa pliku.pdf "
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-05 11:05:41
W aplikacji Ruby on Rails (szczególnie z czymś takim jak Krewn gem i wtyczka Prawnto Rails), możesz to osiągnąć nieco bardziej prosto niż pełny skrypt (jak w poprzednim przykładzie PHP).
W Twoim kontrolerze:
def index
respond_to do |format|
format.html # Your HTML view
format.pdf { render :layout => false }
end
end
Część render :layout => false mówi przeglądarce, aby otworzyła " czy chcesz pobrać ten plik?"prompt zamiast próby renderowania pliku PDF. Wtedy będziesz mógł normalnie połączyć się z plikiem: http://mysite.com/myawesomepdf.pdf
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-13 07:49:25