2009-05-07 12 views

Respuesta

2

La única otra forma en que puedo pensar es modificar la configuración de Firefox. Supongo que no puedes hacer esto.

EDIT:

I remendado una solución del lado del cliente basado en la idea de URI de datos. Utiliza una versión modificada de de base64 encoder y una técnica para binary XMLHTTPrequests La secuencia de comandos descarga el archivo PDF, luego genera y coloca un enlace URI de datos dinámicamente utilizando el codificador base64.

Debería ser útil cuando desee codificación de secuencia de octetos pero no tenga acceso al servidor (como parece ser el caso para el OP).

Nota, acabo de publicar an example usando hunts.pdf, con el que estaba probando el OP.

/** 
* 
* 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

no :(parece que esto debería ser posible ... –

+0

@raj: Para eso son exactamente los encabezados. El cuerpo de respuesta es el contenido, los encabezados son una sugerencia de qué hacer con él (p. Ej., Contenido . -Disposition) – Piskvor

+1

gracias por la solución I trataron utilizando el código Aquí está la parte inferior del código utilicé:. window.addEventListener ("carga", función() { var link = getDataURI ("http : //www.google.com/ads/hunts.pdf "); document.getElementById (" myDiv ").innerHTML + = '' + link + '

'; }

hello
Por desgracia, no había nada en el archivo html, excepto la palabra hola. no pdf ¿Necesito algo más? –

4

Si se puede emitir el archivo al cliente en la base 64, se puede usar URIs de datos para la descarga.

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

Esto sólo funcionará en los navegadores IE no obstante, pero como usted pidió para Firefox, esto debería funcionar muy bien.

EDIT:

Los dos ejemplos a continuación contienen los bytes para hacer un PNG. Si hace clic en el primero, puede ver la imagen como lo haría normalmente en un navegador. sin embargo, si haces clic en el segundo enlace, te obligará a descargar la imagen. Guárdelo como .png y verá que son exactamente las mismas imágenes. La única diferencia entre los dos enlaces es el tipo mime

view image (preview shortened url) - tipo MIME: image/jpeg

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

Usted preguntó qué puso en lugar de appendPDFContentHere y la respuesta son los bytes codificados en base64 que componen el PDF. Lo usé en línea base64 encoder para codificar la imagen utilizada en el ejemplo.

+0

¿qué debo poner en "anexar contenido PDF aquí"? todo el PDF? –

+0

o solo la URL del pdf? –

+0

No, si usted acaba de hacer la URL no se puede agregar el tipo MIME (application/octet-stream). –

Cuestiones relacionadas