pdf js неправильно загружает файл PDF - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть простой веб-сайт, который я использовал для анализа текста из файла 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, как и в большинстве других тестовых файлов)) был загружен неправильно. Вот вывод, который я получаю: Output of the function

Я проверил эту функцию с другим файлом, который использовал PDF-1.3, и он был загружен правильно.

Кто-нибудь знает, в чем может быть источник проблемы, и подсказку, как ее исправить?

...