2009-05-07 9 views

Répondre

2

La seule autre façon que je peux penser est de modifier les paramètres de Firefox. Je suppose que vous ne pouvez pas faire cela.

EDIT:

Je bricolé une solution côté client basée sur l'idée URI de données. Il utilise une version modifiée d'un base64 encoder et une technique pour binary XMLHTTPrequests Le script télécharge le fichier PDF, puis génère et place dynamiquement un lien d'URI de données à l'aide de l'encodeur base64.

Cela devrait être utile lorsque vous voulez coder un flux d'octets mais que vous n'avez pas accès au serveur (comme cela semble être le cas pour l'OP).

Remarque, je viens de poster an example en utilisant hunts.pdf, que l'OP testait avec.

/** 
* 
* Base64 encode/decode 
* http://www.webtoolkit.info/ 
* 
**/ 

var Base64 = { 

    // private property 
    _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/=", 

    // public method for encoding 
    encode : function (input) { 
     var output = ""; 
     var chr1, chr2, chr2raw, chr3, chr3raw, enc1, enc2, enc3, enc4; 
     var i = 0; 

     //input = Base64._utf8_encode(input); 

     while (i < input.length) { 

      chr1 = input.charCodeAt(i++) & 0xFF; 
      chr2 = isNaN(chr2raw = input.charCodeAt(i++)) ? NaN : (chr2raw & 0xFF); 
      chr3 = isNaN(chr3raw = input.charCodeAt(i++)) ? NaN : (chr3raw & 0xFF); 

      enc1 = chr1 >> 2; 
      enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); 
      enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); 
      enc4 = chr3 & 63; 

      if (isNaN(chr2)) { 
       enc3 = enc4 = 64; 
      } else if (isNaN(chr3)) { 
       enc4 = 64; 
      } 

      output = output + 
      this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) + 
      this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4); 

     } 

     return output; 
    } 
} 



// http://web.archive.org/web/20071103070418/mgran.blogspot.com/2006/08/downloading-binary-streams-with.html 
//fetches BINARY FILES synchronously using XMLHttpRequest 

load_url = function(url) { 
    var req = new XMLHttpRequest(); 
    req.open('GET',url,false); 
    //XHR binary charset opt by Marcus Granado 2006 [http://mgran.blogspot.com] 
    req.overrideMimeType('text/plain; charset=x-user-defined'); 
    req.send(null); 

    if (req.status != 200){ 
    alert(req.status); 
    return ''; 
    } 
    return req.responseText; 
} 

    function getDataURI(filename) 
    { 
    var file = load_url(filename); 
    var uueFile = Base64.encode(file); 
    var uri = 'data:application/octet-stream;base64,' + encodeURIComponent(uueFile); 
    return uri; 
    } 

window.addEventListener("load", 
         function() 
         { 
         var link = getDataURI("foo.pdf"); 
         document.getElementById("myDiv").innerHTML += '<a href="' + link + '"><code>' + link + '</code></a><br><br>'; 
         } 
+0

non :(il semble que cela devrait être possible .... –

+0

@raj: C'est exactement ce que les en-têtes sont pour le corps de la réponse est le contenu, les en-têtes sont une suggestion que faire avec (p.ex. . -disposition) – Piskvor

+1

grâce à la solution que j'essayé d'utiliser le code est ici en bas du code je. window.addEventListener ("charge", fonction () { var link = getDataURI ("http : //www.google.com/ads/hunts.pdf "); document.getElementById (" myDiv ").innerHTML + =

'; }

hello
Malheureusement, il n'y avait rien sur le fichier html, sauf le mot bonjour. pas de pdf. Ai-je besoin d'autre chose? –

4

Si vous pouvez envoyer le fichier au client en base64, vous pouvez utiliser les données uris pour le téléchargement.

location.href = 'data:application/octet-stream;base64,' + appendPDFContentHere 
OR 
<a href="data:application/octet-stream;base64,appendPDFContentHere">pdf</a> 

Cela ne fonctionnera que dans les navigateurs non-IE cependant, mais comme vous avez demandé pour Firefox, cela devrait fonctionner bien.

EDIT:

Les deux exemples ci-dessous contiennent les octets pour faire un PNG. Si vous cliquez sur le premier, vous pouvez voir l'image comme vous le feriez normalement dans un navigateur. Cependant, si vous cliquez sur le 2ème lien, cela vous forcera à télécharger l'image. Enregistrez-le en .png et vous verrez qu'ils sont exactement les mêmes images. La seule différence entre les deux liens est le type MIME

view image (preview shortened url) - type MIME: image/png

download image (preview shortened url) - type MIME: application/octet-stream

Vous demandé ce que vous mettez à la place de appendPDFContentHere et la réponse est les octets encodés en base64 qui composent le PDF. J'ai utilisé ce base64 encoder en ligne pour coder l'image utilisée dans l'exemple.

+0

que devrais-je mettre "ajouter du contenu PDF ici"? l'intégralité du PDF? –

+0

ou juste l'URL du fichier pdf? –

+0

Non, si vous ne faites que l'URL, vous ne pouvez pas ajouter le type MIME (application/octet-stream). –

Questions connexes