2014-12-31 17 views
6
  • del browser: Chrome
  • ambiente: graal app localhost

Sono in esecuzione un'applicazione graal su host locale (che so che c'è un problema con il pdf.js e file system locale) e invece di utilizzare un file: url che so che non riuscire sto passando in un array javascript digitato e non funziona ancora. Per essere corretti non mi sta dicendo altro che "Attenzione: impostare un falso lavoratore". e poi non fa nulla.pdf.js non riuscendo a GetDocument

this.base64ToBinary = function(dataURI) { 
     var BASE64_MARKER = ';base64,'; 
     var base64Index = dataURI.indexOf(BASE64_MARKER) + BASE64_MARKER.length; 
     var base64 = dataURI.substring(base64Index); 
     var raw = window.atob(base64); 
     var rawLength = raw.length; 
     var array = new Uint8Array(new ArrayBuffer(rawLength)); 

     for(i = 0; i < rawLength; i++) { 
     array[i] = raw.charCodeAt(i); 
     } 
     return array; 
    }; 

PDFJS.disableWorker = true; // due to CORS 

// I convert some base64 data to binary data here which comes back correctly 
var data = utilities.base64ToBinary(result); 

PDFJS.getDocument(data).then(function (pdf) { 
     //nothing console logs or reaches here 
     console.log(pdf); 
}).catch(function(error){ 
//no error message is logged either 
      console.log("Error occurred", error); 
     }); 

Mi chiedo se non l'ho impostato correttamente? Posso usare questa libreria esclusivamente dal lato client includendo semplicemente pdf.js o devo includere anche viewer.js? e ho notato anche il file di compatibilità ... l'impostazione non è molto chiara e questo esempio funziona FIDDLE e il mio no e non sto capendo la differenza. Anche se uso l'url fornito in quell'esempio dice anche la stessa cosa.

enter image description here

+1

Cosa utilities.base64ToBinary fa ritorno? Se non è Uint8Array, allora non funzionerà. Inoltre, aggiungi il secondo callback di errore alla chiamata 'then', che mostrerà il motivo dell'errore. – async5

+0

@ async5 Ho modificato la mia domanda per includere la funzione che sto usando per creare l'Uint8Array e sta creando l'array correttamente. Lo stesso errore viene dato quando uso l'URL fornito nell'esempio di fiddle, quindi qualcos'altro sta succedendo. Fammi provare la funzione di errore e vedere quali sono i rendimenti. – btm1

+0

@ async5 qual è il formato per la funzione di errore? È così? : PDFJS.getDocument (data) .then (function() {}). Error (function (data) {}); Non sembra funzionare. – btm1

risposta

14

I get a rispondere alla mia domanda:

la documentazione non è affatto chiaro. Se non si specifica PDFJS.workerSrc in modo che punti al file pdf.worker.js corretto rispetto a pdf.js, tenta di capire quale sia il percorso src corretto per il file e di caricarlo.

Il loro metodo, tuttavia, è abbastanza impreciso per fare questo:

if (!PDFJS.workerSrc && typeof document !== 'undefined') { 
    // workerSrc is not set -- using last script url to define default location 
    PDFJS.workerSrc = (function() { 
    'use strict'; 
    var scriptTagContainer = document.body || 
          document.getElementsByTagName('head')[0]; 
    var pdfjsSrc = scriptTagContainer.lastChild.src; 
    return pdfjsSrc && pdfjsSrc.replace(/\.js$/i, '.worker.js'); 
    })(); 
} 

afferrano solo l'ultimo tag script nella testa e supponiamo che questo è lo src diritto di caricare il file invece di cercare tutti i tag di script per il src che contiene "pdf.js" e che usa quello corretto.

Invece dovrebbero solo far capire e richiedono che si fa in punto infatti PDFJS.workerSrc = "(il vostro percorso) /pdf.worker.js"

+0

se è una risposta, potresti contrassegnarla come tale? – async5

+0

Mi sono imbattuto in questo. Grazie per aver risposto a questo e averlo esaminato! – contactmatt