web-dev-qa-db-ja.com

防止PDF pdf.jsを使用したidmによる自動ダウンロード

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>

enter image description here

20
user3003810

これは、問題の発生に関連するものではなく、ユーザー固有の環境に関連するものです。

問題:

[〜#〜] idm [〜#〜]を使用して、メディア拡張子で終わる任意のURL(例:* .JPG、*。PNG、* .MP4、*。WMV、*。PDF ..etc)は自動的にダウンロードされますが、ユーザーが[〜#〜] idm [〜#〜]インストールすると、ファイルはブラウザウィンドウにすぐに表示されます。

考えられる解決策:

  1. 自動ダウンロードを防ぐために、IDMからPDF拡張ハンドラーを削除してください。画像はそれを非常によく説明していると思います。

IDM prevent file types from being handled

  1. PDFリンクの応答ヘッダーを変更して、ブラウザがビュー内でpdfを表示するように強制します。ブラウザごとに応答の処理が異なる場合があることを考慮してください。この方法の詳細については、こちらをご覧くださいここ

最後の注意:

開発者として、各ユーザー固有の環境を処理するべきではありません。ユーザーが特定のアプリをインストールして汎用ファイルを処理する場合、開発者の役割ではなく、そのアプリケーションを処理するのはユーザーの役割であると考えられます。このアルゴリズムに従うと、さまざまなユーザー固有のセットアップを処理する無限ループ内にジャンプします。

13
ProllyGeek

メインファイルから.pdf拡張子を削除するだけです。 IDMはそれがどのようなものかを検出できません。しかし、ブラウザはそれをネイティブな方法で処理します。

3
Arif

これで試してみてください

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

Idm(PdfJs)からの自動ダウンロードを防ぐことができます。 IDMは拡張pdfファイルを見つけるので、pdfファイルをbase-64に変換してから、pdfのbase64をノードDOMsrcに読み込む必要があります。

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 should

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

-with 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

1
Sen Sokha

あなたのコメントから判断すると、あなたのウリは間違っているかもしれません。
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>
1
dong kuk Park