Apakah ada cara untuk memaksa file PDF untuk dibuka di browser ketika opsi "Tampilkan PDF di browser" tidak dicentang?
Saya mencoba menggunakan tag embed dan iframe, tetapi hanya berfungsi ketika opsi itu dicentang.
Apa yang dapat saya?
Apakah ada cara untuk memaksa file PDF untuk dibuka di browser ketika opsi "Tampilkan PDF di browser" tidak dicentang?
Saya mencoba menggunakan tag embed dan iframe, tetapi hanya berfungsi ketika opsi itu dicentang.
Apa yang dapat saya?
Jawaban:
Untuk menunjukkan kepada browser bahwa file harus dilihat di browser, respons HTTP harus menyertakan tajuk ini:
Content-Type: application/pdf
Content-Disposition: inline; filename="filename.pdf"
Agar file diunduh daripada dilihat:
Content-Type: application/pdf
Content-Disposition: attachment; filename="filename.pdf"
Kutipan di sekitar nama file diperlukan jika nama file berisi karakter khusus seperti filename[1].pdf
yang dapat merusak kemampuan browser untuk menangani respons.
Cara Anda mengatur header respons HTTP akan bergantung pada server HTTP Anda (atau, jika Anda menghasilkan respons PDF dari kode sisi server: bahasa pemrograman sisi server Anda).
Jika Anda menggunakan HTML5 (dan saya kira saat ini semua orang menggunakannya), ada atribut yang disebut download
.
Sebagai contoh,
<a href="somepathto.pdf" download="filename">
Ini filename
opsional, tetapi jika disediakan, nama ini akan diambil untuk file yang diunduh.
Jenis yang benar adalah application/pdf
untuk PDF, bukan application/force-download
. Ini terlihat seperti retasan untuk beberapa browser lawas. Selalu gunakan mimetype yang benar jika Anda bisa.
Jika Anda memiliki kendali atas kode server:
header("Content-Disposition", "attachment; filename=myfilename.myextension");
header("Content-Disposition", "inline; filename=myfilename.myextension");
Tidak ada kontrol atas kode server:
CATATAN: Saya lebih suka mengatur nama file di sisi server karena Anda mungkin memiliki informasi lebih lanjut dan dapat menggunakan kode umum.
Jika Anda memiliki Apache, tambahkan ini ke .htaccess
file:
<FilesMatch "\.(?i:pdf)$">
ForceType application/octet-stream
Header set Content-Disposition attachment
</FilesMatch>
Ups, ada kesalahan pengetikan di pos saya sebelumnya.
header("Content-Type: application/force-download");
header("Content-type: application/pdf");
header("Content-Disposition: inline; filename=\"".$name."\";");
Jika Anda tidak ingin browser meminta pengguna, gunakan "inline" untuk string ketiga alih-alih "lampiran". Inline bekerja dengan sangat baik. Tampilan PDF segera tanpa meminta pengguna untuk mengklik Open. Saya telah menggunakan "lampiran" dan ini akan meminta pengguna untuk Buka, Simpan. Saya sudah mencoba mengubah mur pengaturan browser itu tidak mencegah prompt.
Ini untuk ASP.NET MVC
Di halaman cshtml Anda:
<section>
<h4><a href="@Url.Action("Download", "Document", new { id = @Model.GUID })"><i class="fa fa-download"></i> @Model.Name</a></h4>
<object data="@Url.Action("View", "Document", new { id = @Model.GUID })" type="application/pdf" width="100%" height="800" class="col-md-12">
<h2>Your browser does not support viewing PDFs, click on the link above to download the document.</h2>
</object>
</section>
Di controller Anda:
public ActionResult Download(Guid id)
{
if (id == Guid.Empty)
return null;
var model = GetModel(id);
return File(model.FilePath, "application/pdf", model.FileName);
}
public FileStreamResult View(Guid id)
{
if (id == Guid.Empty)
return null;
var model = GetModel(id);
FileStream fs = new FileStream(model.FilePath, FileMode.Open, FileAccess.Read);
return File(fs, "application/pdf");
}
Sementara yang berikut ini berfungsi dengan baik di firefox, itu TIDAK bekerja pada browser chrome dan seluler.
Content-Type: application/pdf
Content-Disposition: inline; filename="filename.pdf"
Untuk memperbaiki kesalahan chrome & browser seluler, lakukan hal berikut:
Google PDF Viewer dapat digunakan sebagai berikut:
<iframe src="http://docs.google.com/gview?url=http://example.com/path/to/my/directory/pdffile.pdf&embedded=true" frameborder="0"></iframe>
Buka downloads.php dari rootfile.
Lalu buka baris 186 dan ubah menjadi yang berikut:
if(preg_match("/\.jpg|\.gif|\.png|\.jpeg/i", $name)){
$mime = getimagesize($download_location);
if(!empty($mime)) {
header("Content-Type: {$mime['mime']}");
}
}
elseif(preg_match("/\.pdf/i", $name)){
header("Content-Type: application/force-download");
header("Content-type: application/pdf");
header("Content-Disposition: inline; filename=\"".$name."\";");
}
else{
header("Content-Type: application/force-download");
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"".$name."\";");
}
Anda dapat melakukan ini dengan cara berikut:
<a href="path to PDF file">Open PDF</a>
Jika file PDF ada di dalam beberapa folder dan folder itu tidak memiliki izin untuk mengakses file di folder itu secara langsung, maka Anda harus melewati beberapa pembatasan akses .htaccess
file menggunakan pengaturan file dengan cara ini:
<FilesMatch ".*\.(jpe?g|JPE?G|gif|GIF|png|PNG|swf|SWF|pdf|PDF)$" >
Order Allow,Deny
Allow from all
</FilesMatch>
Tetapi sekarang izinkan saja file-file tertentu yang diperlukan.
Saya telah menggunakan kode ini dan bekerja dengan sempurna.
Baik digunakan
<embed src="file.pdf" />
jika embedding adalah opsi atau plugin baru saya, PIFF: https://github.com/terrasoftlabs/piff
Berikut adalah metode lain untuk memaksa file melihat di browser dalam PHP:
$extension = pathinfo($file_name, PATHINFO_EXTENSION);
$url = 'uploads/'.$file_name;
echo '<html>'
.header('Content-Type: application/'.$extension).'<br>'
.header('Content-Disposition: inline; filename="'.$file_name.'"').'<br>'
.'<body>'
.'<object style="overflow: hidden; height: 100%;
width: 100%; position: absolute;" height="100%" width="100%" data="'.$url.'" type="application/'.$extension.'">
<embed src="'.$url.'" type="application/'.$extension.'" />
</object>'
.'</body>'
. '</html>';
header
tidak berfungsi setelah Anda mulai menghasilkan badan permintaan (dan tidak mengembalikan string untuk digabungkan dalam dokumen HTML)
Cukup buka Adobe Reader, menu → Edit → Preferences → Internet , lalu ubah ke mode peramban atau untuk petunjuk terperinci tentang berbagai peramban, coba Tampilkan PDF di peramban | Acrobat, Acrobat Reader .
Jika Anda menautkan ke .PDF itu akan terbuka di browser.
Jika kotak ini tidak dicentang, kotak itu harus terhubung ke .zip untuk memaksa unduhan.
Jika .zip bukan opsi, gunakan header di PHP untuk memaksa unduhan
header('Content-Type: application/force-download');
header('Content-Description: File Transfer');