Обнаружение метаданных о PDF из Javascript - PullRequest
0 голосов
/ 03 июля 2019

Если мой код JavaScript работает с расширением Chrome, и браузер загрузил файл PDF, могу ли я обнаружить метаданные о загруженном PDF (количество страниц и т. Д.)? Дополнительная проблема: сам PDF загружается сторонним расширением браузера. Я ищу способ сделать это, не требующий включения огромной библиотеки, такой как pdf.js.

Ответы [ 2 ]

0 голосов
/ 06 июля 2019

В документе PDF не указано количество страниц в его метаданных. Даже если бы вы добавили некоторые собственные метаданные для отслеживания этой информации, это не было бы стандартным способом, который могли бы ожидать читатели PDF.

0 голосов
/ 03 июля 2019

После некоторого быстрого Google-fu я узнал, что PDF-файлы хранят метаданные в XMP Format (XML).Таким образом, вы можете читать необработанные данные из метаданных с простым регулярным выражением.

Выберите PDF-файл на своем компьютере, чтобы увидеть демонстрацию:

document.getElementById('f').oninput = async function() {
  var pdf = this.files[0];
  var details = await pdfDetails(pdf);
  console.log(details);
};

function pdfDetails(pdfBlob) {
  return new Promise(done => {
    var reader = new FileReader();
    reader.onload = function() {
      var raw = reader.result;
      var Pages = raw.match(/\/Type[\s]*\/Page[^s]/g).length;
      var regex = /<xmp.*?:(.*?)>(.*?)</g;
      var meta = [{
        Pages
      }];
      var matches = regex.exec(raw);
      while (matches != null) {
        matches.shift();
        meta.push({
          [matches.shift()]: matches.shift()
        });
        matches = regex.exec(raw);
      }
      done(meta);
    };
    reader.readAsBinaryString(pdfBlob);
  });
}
<input type=file id=f accept=".pdf">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...