Я понял. Вскоре - получить весь текст в массив и / или коллекцию и отсортировать по противоположным Y и затем координатам X из массива Transform, чтобы получить правильный порядок.
Описание: Очень приятно понимать, чтоось Y в файле PDF находится в противоположном направлении.Я получил его и нашел дополнительную информацию об этом после некоторого времени отладки.
Таким образом, вот простая работа, чтобы получить общий правильный порядок текста.1. Получить все элементы как есть.2. Затем найдите в массиве элементов массив Transform.3. Получить в массиве Преобразование значений X (4-й) и Y (5-й) позиций этого элемента.4. Я использую Lodash.js, чтобы сгруппировать по 2 категориям X и Y массив, который я получил наконец.Позаботьтесь о том, что вам нужно сначала отсортировать по Y от большего к меньшему, потому что Y в PDF обратный.Затем сортируйте по X;
_.orderBy(pagetext, ['y','x'], ['desc', 'asc'] )
В приведенном ниже коде, я полагаю, вы получили объект страницы PDF.Код:
// got text elements from getTextContent() to new array with page, x, y, and text
pagetext.push(
{ 'p': i, 'x': el.transform[4], 'y': el.transform[5], 't': el.str } )
// follow what we got
console.log( (++ind) + ". "
+" t: "+ el.transform
+" x= "+ el.transform[4]
+" y= "+ el.transform[5]
+" | "+ el.str );
})
return pagetext; // return all text as result from page
})
.then(function(ptext){
// be careful :)
// resort order by opposite Y and then X coordinates
let pagetext = ptext;
console.log( "# it is wrong # pagetext = ", pagetext );
let p2 = _.orderBy(pagetext, ['y','x'], ['desc', 'asc'] )
console.log( "# it is correct # pagetext = ", p2 );
});
Вот пример массива около 1 текстового элемента на странице.Вы получите много элементов с getTextContent в произвольном порядке, как я показал выше в вопросе.
//From console:
Object
items : Array(24)
str : "How to align these objects"
transform : (6) [18, 0, 0, 18, 349.76, 335.25]
width : 190.78199999999998
__proto__
Удачи:)