Как получить текст (поток, закодированный с помощью фильтра FlateDecode) в аннотациях с использованием pdf.js? - PullRequest
0 голосов
/ 08 февраля 2019

Необходимо решить с помощью pdf.js:

a) Использование pdf.js Возможно получить аннотации с помощью getAnnotations (), но не любую информацию, касающуюся текста в этой аннотации.Как извлечь его?

b) Как извлечь поток из объекта (ref: gen num), например:

/N: 8 0 R
/Filter:FlateDecode

1 Ответ

0 голосов
/ 11 февраля 2019

Я получил ответы на мои сомнения, используя:

Я объясню проблему и решение.

Проблема

Извлечь текстиз аннотаций в PDF-файлах с использованием слоя отображения PDF.js.

Решение

PDF.js имеет различные слои:

  1. Core: слой, в котором анализируется двоичный PDF-файл
  2. Отображение : с помощью рендеринга PDF базового слоя можно получить информацию о документе
  3. Просмотр :Интерфейс для просмотра PDF в Firefox и других расширениях браузера

Для извлечения текста из аннотаций необходима работа в Core и Дисплей layer.

I.Базовый слой :

Создание открытого свойства (annotationText) со всеми текстами в аннотации

a) Изменить src / core / annotation.js

a.1) Аннотация класса конструктор: добавить строку и конец конструктора

    // Expose public properties using a data object.
    this.data = {
      ... 
      annotationText: this._extractText(params) // -> Add this line *****
    };

  }

a.2) Аннотация класса - добавить методдля извлечения текста:

      _extractText(params) {
      // AP - Appearance Dictionary
      let appearanceDictionary = params.dict.get('AP');
      // No AP
      if (typeof appearanceDictionary === 'undefined') {
         return '';
      }

      // N - Stream 
      let normalAppearance = appearanceDictionary.xref.fetch(appearanceDictionary._map.N);
      normalAppearance.getBytes()
      // No text
      if (typeof normalAppearance.buffer === 'undefined') {
         return '';
      }

      let numParentheses = 0;
      let streamText = '';

      for (let i = 0; i < normalAppearance.buffer.length; i++) {
        if (String.fromCharCode(normalAppearance.buffer[i]) === ")") {
          numParentheses--;
        }
        if (numParentheses > 0) {
        streamText += String.fromCharCode(normalAppearance.buffer[i]);
        }
        if (String.fromCharCode(normalAppearance.buffer[i]) === "(") {
          numParentheses++;
        }
      }

      return streamText;
    }

b) Объединить все файлы src / в два производственных скрипта ( pdf.js и pdf.worker.js )

 $ gulp generic

II.Слой отображения :

Отображение текстов в annotationText

  page.getAnnotations().then(
    function (annotations) {

      let textInAnnotations = ""
      for (annotation in annotations) {

         textInAnnotations = textInAnnotations + " - " + annotations[annotation].annotationText

      }

      console.log("Text in annotations: "+textInAnnotations)

    });
...