2015-11-18 21 views
7

Ho visto così tanti post SO diversi su questo oggi.Rendering PDF in ie all'interno del browser

Ho un'applicazione che deve mostrare documenti PDF all'interno del browser. Questa applicazione deve anche essere eseguita in IE (11+).

Ecco cosa: uno iframe con un src funziona bene. Qualcosa di simile:

<iframe src="www.myurl.com/thedocument"></iframe> 

Tuttavia, www.myurl.com/thedocument è ora protetto dal OAuth. Ciò significa che è necessario richiedere www.myurl.com/thedocument con le credenziali di intestazione dell'autorizzazione appropriate.

Questo significa (credo), che devo richiedere www.myurl.com/thedocument tramite ajax. La richiesta ajax restituisce base64 o un byte [] contenente il documento.

IE non supporta gli URI di dati per il rendering di PDF, quindi non posso semplicemente suddividere la risposta dalla mia richiesta Ajax nell'iframe.

Quindi .. ora sono bloccato.

Qualche idea?

Grazie

risposta

3

Una possibilità sarebbe quella di utilizzare PDF.js, una libreria javascript per il rendering PDF in una tela HTML5 con support for IE10+. La libreria supporta il caricamento di dati PDF da un TypedArray (ad esempio Uint8Array), che potrebbe essere prodotto dal risultato di una richiesta Ajax.

Ho preparato un breve esempio here che visualizza un PDF a pagina singola memorizzato in un binario codificato in base64. Per evitare di eseguire la conversione Base64, un TypedArray potrebbe anche essere recuperate direttamente da una risposta XMLHttpRequest:

function reqListener() { 
    var byteArray = new Uint8Array(this.response); 
    PDFJS.getDocument(byteArray).then(function(page) { 
     // .... 
    }); 
} 

var req = new XMLHttpRequest(); 
req.addEventListener("load", reqListener); 
req.responseType = "arraybuffer"; 
req.open("GET", "http://www.example.com/example.pdf"); 
req.send(); 

per supportare le funzionalità che ci si aspetterebbe in un visualizzatore PDF nativo (stampa, ecc) La libreria include un example viewer che puoi adattarti per i tuoi scopi.

+0

PDF.js è una grande libreria. Tuttavia, il rendering di TUTTE le pagine del pdf in una volta è qualcosa che la libreria non fa molto bene (dove come il rendering di un uri di dati in chrome mostra tutte le pagine nel pdf - e lo fa molto bene). Questo è un ottimo suggerimento. Sfortunatamente, non ha la funzione specifica che sto cercando. – Jeff

+1

Nessun problema. Non sarebbe il modo più performante per renderli, ma per i documenti pesanti come il testo non sembra troppo male. Se non lo hai già fatto, puoi provare ad aprire i tuoi pdf nella [demo] (https://mozilla.github.io/pdf.js/web/viewer.html) per vedere se è pronta per iniziare. – tmw

+3

@Jeff Con IE è PDF.js o iframe. Secondo la mia ricerca, data la tua situazione non puoi usare iframe, perché IE non supporta iframe di dati uri, quindi non hai molta scelta qui. – Sheepy