У нас есть приложение, которое должно автоматически импортировать, например, данные заказа из файла PDF.Пользователь может создать шаблон, в котором он может нарисовать прямоугольники вокруг областей в PDF-файле для текста, который необходимо извлечь позже.
Сейчас я отрисовываю PDF-файл через pdfjs в браузере и позволяю пользователюнарисуйте прямоугольники в PDF (DIV), а затем сохраните результат в базе данных со свойствами DOMRect из них (используя getBoundingClientRect ()).
PDFjs также предоставляет геометрические данные каждого текстового объекта, который он анализирует, НО преобразованиеданные представляют собой матрицу 3х3.Теперь моя проблема в том, что я не знаю, как правильно рассчитать координаты из определенных пользователем областей и матрицы PDFjs 3x3, поэтому они совпадают при обработке их через узел на стороне сервера.
I 'Мы попробовали пару вещей, которые не принесли необходимых результатов.Первый метод все еще использовал библиотеку парсинга PDF для PHP, но я быстро отказался от нее, поскольку она не предоставляла никаких позиционных данных.
Затем я использовал Node и PDFjs, что привело кпроблема вычисления пользовательских полей с матрицами текстовых объектов PDFjs.
Вчера я попытался использовать библиотеку jsdom для создания виртуального dom и просто проверил визуализированные объекты текстового слоя с данными, определенными пользователем.Это несколько сработало, НО как-то в то время как в обычном браузере позиции совпадают просто отлично, используя метод jsdom, я вижу разные результаты.Я подозреваю, что сама jsdom может быть причиной, так как это не настоящий движок рендеринга, поэтому он может искажать или не предоставлять некоторые вещи, которые есть у вас в обычном браузере.
Мои две другие альтернативы, которые я придумал, были былибо полностью обработать импорт данных на стороне клиента, либо поиграть с pupeteer.
Но прежде чем я это сделаю, я хотел спросить, может быть, есть более простой способ и просто правильно рассчитать позиционные данные из определенных пользователемобласти (x, y, w, h) и матрица 3x3.Я не очень хорош в математике.: D
Типичный текстовый объект из PDFjs выглядит следующим образом:
{
"str": "Textstring",
"dir": "ltr",
"width": 71.24220000000001,
"height": 20.04,
"transform": [20.04, 0, 0, 20.04, 58.584, 804.24],
"fontName": "Helvetica"
}
Хотя пользовательские данные выглядят следующим образом:
{
"x": 274,
"y": 397,
"width": 140,
"height": 83,
"top": 397,
"right": 414,
"bottom": 480,
"left": 274
}
Ожидаемый результат должен бытьчто позиционные данные текстовых объектов PDFjs и определенных пользователем областей могут использоваться вместе для расчета, если определенная пользователем область пересекается с текстовым объектом PDFjs.Либо путем каким-либо образом преобразовать матрицу 3x3 в действительные координаты x, y, w, h ИЛИ преобразовать пользовательские координаты x, y, w, h в матрицу 3x3.