使用pdf.js阻止idm自动下载PDF

问题描述 投票:16回答:5

我正在使用PDF.Js嵌入PDF文件进行预览,我从viewer.js中删除了下载和打开文件的脚本,但是当我测试页面和PDF文件试图显示时,Internet Download Manager下载它并中止预览。搜索之后我发现使用object而不是iframe可能会解决问题,但是pdf查看器显示为白色无效,我该怎么办才能防止自动下载?或使用其他方式(插件)来显示PDF文件内容。

<iframe 
  class="pdf" 
  webkitallowfullscreen="" 
  mozallowfullscreen="" 
  allowfullscreen="" 
  frameborder="no" 
  width="'.$width.'" 
  height="'.$height.'" 
  src="'.$baseurl.'/assets/pdf/web/viewer.html?file='.urlencode($pdf_url).'" 
  data-src="'.$pdf_url.'">
  '.$pdf_url.'
</iframe>

javascript pdf iframe pdf.js
5个回答
13
投票

这与开发问题无关,这与用户特定的环境有关。

问题 :

使用IDM,任何以媒体扩展名结尾的URL(例如* .JPG,* .PNG,*。MP4,* .WMV,* .PDF ..等)都将自动下载,但另一方面如果用户没有如果安装了IDM,将立即在浏览器窗口中查看该文件。

可能的解决方案 :

  1. 从IDM中删除PDF扩展程序处理程序,以防止自动下载,我认为该图像很好地解释了它。

  1. 修改PDF链接的响应标题以强制浏览器在其视图中查看pdf,请考虑每个浏览器可能以不同方式处理响应,有关此方法的更多详细信息可以在here中找到。

最后注意:

作为开发人员,您不应该处理每个特定于用户的环境,我们假设当用户安装特定应用程序来处理通用文件时,处理该应用程序而不是开发人员角色是他/她的角色,因为如果您遵循此算法跳入无限循环内处理不同用户的特定设置。


2
投票

尝试这个

<embed src="'.$baseurl.'/assets/pdf/web/viewer.html?file='.urlencode($pdf_url).'" type="text/html" >

2
投票

只需从主文件中删除.pdf Extension即可。 IDM无法检测到它是什么类型。但浏览器将以原生方式处理它。


1
投票

根据你的评论,我会说你的uri可能不正确。 您可以尝试在线替换任何pdf文件,以查看其余代码是否正常。

如果您只想嵌入PDF对象,可以尝试使用PDFobject.js。 https://github.com/pipwerks/PDFObject http://pdfobject.com/instructions.php

HTML

<div id="my_pdf_object"
  class="pdf" 
  webkitallowfullscreen="" 
  mozallowfullscreen="" 
  allowfullscreen="" 
  frameborder="no" 
  width="'.$width.'" 
  height="'.$height.'" 
>
  It appears you don't have Adobe Reader or PDF support in this web browser. 
  <a href="'.$baseurl.'/assets/pdf/web/viewer.html file='.urlencode($pdf_url).'">
  Click here to download the PDF</a>
</div>

JavaScript的

<script type="text/javascript">
  //loads pdf files for resume
  window.onload = function (){
    var success = new PDFObject({ 
      url: "'.$baseurl.'/assets/pdf/web/viewer.html?file='.urlencode($pdf_url).'" 
    }).embed("my_pdf_object");
  };
</script>

0
投票

可以防止从idm(PdfJs)自动下载。 IDM找到扩展pdf文件,所以我们需要将pdf文件转换为base-64,然后将pdf的base64读入节点DOM src:

1.将您的文件pdf转换为base64

document.getElementById('myfiles').addEventListener('change', function(event){

		var input = document.getElementById("myfiles"); 

		var fReader = new FileReader();
		fReader.readAsDataURL(input.files[0]);
		fReader.onloadend = function(event){ 
    document.getElementById("base64").innerHTML = event.target.result;
		 console.log(event.target.result); 
     
		}
	});
<input type="file" name="files" id="myfiles" value=""><br>
<textarea id="base64" cols="50"></textarea>

2.将所有字符串base64放到txt文件中

FILENAME.TXT

3.从文件txt读取base64并过去到iframe或者使用viewer.js(PDF JS)

-iframe应该

<iframe scr="data:application/pdf,base64.....">prevent download from idm</iframe>

- 使用PDF查看器

 var xhr = new XMLHttpRequest();
     console.log(file);
     xhr.open('GET', folderFiles+filename+".txt", true);
     xhr.responseType = 'text';
     xhr.onload = function(e) {
     
        if (this.status == 200) {
     
           PDFViewerApplication.open(this.response);     
        
        }
      };

因此,IDM不会自动强制下载pdf文件,因为它无法找到特定文件。链接:https://github.com/sokhasen/ViewerPDF.git

© www.soinside.com 2019 - 2024. All rights reserved.