У меня есть простой веб-сайт, который я использовал для анализа текста из файла PDF. Чтобы получить текст, я использовал (слегка измененную версию) этот код , как показано ниже.
Html file:
<link href="main.css" rel="stylesheet">
<script src="imports/pdfjs-2.3.200-dist/build/pdf.js" type="text/javascript" ></script>
<script type="module" src="script.js" defer></script>
</head>
<body>
<div id= "main"><p>Please select the PDF file: <input type="file" id="file-input"/> </p></div>
</body>
И соответствующая часть сценария. js file:
var test = true;
function readSingleFile(e) {
var file = e.target.files[0];
if (!file) {
alert("Can't read file!");
return;
}
var reader = new FileReader();
reader.onload = function(e) {
var contents = new Uint8Array(e.target.result);
analyseFile(contents);
};
reader.readAsArrayBuffer(file);
}
function analyseFile(fileC)
{
mainP.innerHTML = "Processing data...";
// waiting on gettext to finish completion, or error
getPDFText(fileC).then(function (output) {
analyseData(output)
},
function (reason) {
console.error(reason);
});
}
function getPDFText(pdfFile)
{
var pdf = pdfjsLib.getDocument(pdfFile);
if(test) console.log(pdf);
return pdf.promise.then(function(pdf) { // get all pages text
var maxPages = pdf.numPages;
if(test) console.log("maxPages var = " + maxPages);
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('');
});
});
}
document.getElementById('file-input').addEventListener('change', readSingleFile, false);
Так что, в основном, readSingleFile
вызывает analyseFile
, что, в свою очередь, вызывает getPDFText
.
Работает для большинства файлов PDF. Однако я обнаружил, что один указанный файл c (в котором использовалась старая версия PDF (1.3 вместо 1.7, как и в большинстве других тестовых файлов)) был загружен неправильно. Вот вывод, который я получаю:
Я проверил эту функцию с другим файлом, который использовал PDF-1.3, и он был загружен правильно.
Кто-нибудь знает, в чем может быть источник проблемы, и подсказку, как ее исправить?