2016-11-16 8 views
1

Ich bin neu in ES6 und Promise. Ich versuche pdf.js, um Texte aus allen Seiten einer PDF-Datei in ein String-Array zu extrahieren. Und wenn die Extraktion abgeschlossen ist, möchte ich das Array irgendwie parsen. Sagen Sie pdf-Datei (bestanden über typedarray korrekt) hat 4 Seiten und mein Code:Wie man Text aus einem pdf mit pdf.js korrekt extrahiert

let str = []; 
PDFJS.getDocument(typedarray).then(function(pdf) { 
    for(let i = 1; i <= pdf.numPages; i++) { 
    pdf.getPage(i).then(function(page) { 
     page.getTextContent().then(function(textContent) { 
     for(let j = 0; j < textContent.items.length; j++) { 
      str.push(textContent.items[j].str); 
     } 
     parse(str); 
     }); 
    }); 
    } 
}); 

Es zu arbeiten schafft, aber natürlich, das Problem ist, meine parse Funktion 4 mal aufgerufen. Ich möchte nur parse aufrufen, nachdem alle 4-Seiten-Extraktion durchgeführt wurde. Jeder Rat ist willkommen. Bitte erhelle mich.

+0

Ähnlich http://stackoverflow.com/a/40494019/1765767 - Sammle Seitenversprechen mit Promise.all und vergesse nicht, das zu verketten. – async5

+0

@ async5 Es funktioniert! Ich versuchte es zuerst [http://stackoverflow.com/a/28875245/6153990] und es funktionierte mit einer leichten Änderung, aber die Antwort, die Sie zur Verfügung gestellt haben, sieht korrekter aus. Bitte antworte darauf als Antwort, damit ich es annehmen kann. Vielen Dank! –

Antwort

2

Ähnlich https://stackoverflow.com/a/40494019/1765767 - sammeln Seite verspricht Promise.all mit und vergessen Sie nicht an die Kette dann ist:

function gettext(pdfUrl){ 
 
var pdf = PDFJS.getDocument(pdfUrl); 
 
return pdf.then(function(pdf) { // get all pages text 
 
    var maxPages = pdf.pdfInfo.numPages; 
 
    var countPromises = []; // collecting all page promises 
 
    for (var j = 1; j <= maxPages; j++) { 
 
     var page = pdf.getPage(j); 
 

 
     var txt = ""; 
 
     countPromises.push(page.then(function(page) { // add page promise 
 
      var textContent = page.getTextContent(); 
 
      return textContent.then(function(text){ // return content promise 
 
       return text.items.map(function (s) { return s.str; }).join(''); // value page text 
 

 
      }); 
 
     })); 
 
    } 
 
    // Wait for all pages and join text 
 
    return Promise.all(countPromises).then(function (texts) { 
 
     
 
     return texts.join(''); 
 
    }); 
 
}); 
 
} 
 
// waiting on gettext to finish completion, or error 
 
gettext("https://cdn.mozilla.net/pdfjs/tracemonkey.pdf").then(function (text) { 
 
    alert('parse ' + text); 
 
}, function (reason) { 
 
    console.error(reason); 
 
});
<script src="https://npmcdn.com/pdfjs-dist/build/pdf.js"></script>

Verwandte Themen