如何使用pdf.js从pdf正确提取文本 [英] How to correctly extract text from a pdf using pdf.js
问题描述
我是ES6和Promise的新手.我正在尝试pdf.js将pdf文件所有页面中的文本提取到字符串数组中.当提取完成后,我想以某种方式解析数组.说pdf文件(正确通过typedarray
传递)有4
页,我的代码是:
I'm new to ES6 and Promise. I'm trying pdf.js to extract texts from all pages of a pdf file into a string array. And when extraction is done, I want to parse the array somehow. Say pdf file(passed via typedarray
correctly) has 4
pages and my code is:
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
.
It manages to work, but, of course, the problem is my parse
function is called 4
times. I just want to call parse
only after all 4-pages-extraction is done.
推荐答案
类似于 https://stackoverflow.com/a/40494019 /1765767 -使用Promise.all收集页面承诺,不要忘记链接当时的页面:
Similar to https://stackoverflow.com/a/40494019/1765767 -- collect page promises using Promise.all and don't forget to chain then's:
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>
这篇关于如何使用pdf.js从pdf正确提取文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!