Доброго времени суток!
Стоит задача верификации PDF-отчетов. Данную тему читал, предложенное решение не совсем подходит. Собственно, на текущий момент подготовлен модуль, работающий с itextpdf либой. Для анализа элементов формируется xml модель на основе pdf исходника. Проблема в том, что сама либа дробит текст на множество блоков, которые порой очень непросто найти. К примеру, строка "Какой чудесный день" может в xml модели быть представлена в виде:
<text id="3" pageNumber="1">
<ascentLineRectangle>
<height>1.0</height>
<width>25.0</width>
<x>164.0</x>
<y>754.0</y>
</ascentLineRectangle>
<baseLineRectangle>
<height>1.0</height>
<width>25.0</width>
<x>164.0</x>
<y>744.0</y>
</baseLineRectangle>
<descentLineRectangle>
<height>1.0</height>
<width>25.0</width>
<x>164.0</x>
<y>741.0</y>
</descentLineRectangle>
<fontName>Helvetica-Bold</fontName>
<renderMode>0</renderMode>
<singleSpaceWidth>3.6139984</singleSpaceWidth>
<text>Како</text>
</text>
<text id="5" pageNumber="1">
...
<text>й</text>
</text>
<text id="7" pageNumber="1">
...
<text>чудесны</text>
</text>
<text id="11" pageNumber="1">
...
<text>й</text>
</text>
<text id="17" pageNumber="1">
...
<text>день</text>
</text>
Причем, помимо разбиения самого слова, эти блоки могут идти еще и не подряд, более того - с отклонением в координатах на пару пикселей. Это все недостатки самой либы, но суть сейчас не в ней. Пользователь хочет верифицировать конкретные участки PDF репорта конкретными expected значениями. Т.е. вызовом метода
verifyText(PDFElement.Title, "Какой чудесный день");
я смог бы проверить тайтл документа на соответствие заданной строке.
Пока есть очень сложное и трудоемкое решение с привязкой к модели данных: создание в коде темплейта PDF документа, описание всех логических блоков и элементов с привязкой к набору ID, парсинг xml модели по заданным ID и сравнение с эталоном. Такой подход требует значительной подготовки и очень сильно завязан на модели данных. Т.е. если завтра формат репорта поменяется, придется писать новый темплейт.
Собственно, вопрос в том, сталкивался ли кто-либо с анализом PDF документов? Может существует более красивое решение? Или возможно у кого-то есть идеи, как можно распарсить xml таким образом, чтобы найти текст, разбитый на блоки в хаотичном порядке?
П.С. С картинами приблизительно то же самое, но value в xml представлено в виде encoded base64 string. Ну а вариант, предложенный в другом топике, не подходит, ибо там нет логической составляющей, а лишь банальная проверка мэпа на contains.