ES6とPromiseは初めてです。私はpdf.jsを試して、pdfファイルのすべてのページから文字列配列にテキストを抽出しています。そして、抽出が完了したら、どういうわけか配列を解析したいと思います。 PDFファイル(typedarray
を介して正しく渡された)に4
ページがあり、私のコードは次のとおりです。
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);
});
});
}
});
なんとか動作しますが、もちろん問題は、私のparse
関数が4
回呼び出されることです。すべての4ページの抽出が完了した後でのみ、parse
を呼び出したいだけです。
以下は、より短い(必ずしも良いとは限りません)バージョンです。
async function getPdfText(data) {
let doc = await pdfjsLib.getDocument({data}).promise;
let pageTexts = Array.from({length: doc.numPages}, async (v,i) => {
return (await (await doc.getPage(i+1)).getTextContent()).items.map(token => token.str).join('');
});
return (await Promise.all(pageTexts)).join('');
}
ここで、data
は文字列またはバッファーです(または、URLを取得するように変更することもできます)。