Я получил ответы на мои сомнения, используя:
Я объясню проблему и решение.
Проблема
Извлечь текстиз аннотаций в PDF-файлах с использованием слоя отображения PDF.js.
Решение
PDF.js имеет различные слои:
- Core: слой, в котором анализируется двоичный PDF-файл
- Отображение : с помощью рендеринга PDF базового слоя можно получить информацию о документе
- Просмотр :Интерфейс для просмотра 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)
});