Подтвердить что ты не робот

PDF узнает, подчеркнули ли текст или ячейку таблицы

Я играл с помощью метода PdfBox и PDFTextStripperByArea.

Мне удалось извлечь информацию, если текст жирный или курсив, но я не могу получить информацию подчеркивания.

Насколько я понимаю в PDF, подчеркивание делается путем рисования линий. Поэтому теоретически я должен получить некоторую информацию о строках где-то вокруг текста. Предоставляя эту информацию, я мог бы узнать, подчеркивается ли какой-либо текст или в таблице.

Вот мой код:

List<TextPosition> textPos = charactersByArticle.get(index);

for (TextPosition t : textPos)
{               
    if (t.getFont().getFontDescriptor() != null)
    {                           
        if (t.getFont().getFontDescriptor().getFontWeight() > BOLD_WEIGHT ||
            t.getFont().getFontDescriptor().isForceBold())
        {
            isBold = true;
        }

        if (t.getFont().getFontDescriptor().isItalic())
        {
            isItalic = true;
        }
    }
}

Я попытался воспроизвести объект PDGraphicsState, который обрабатывается в методе processEncodedText в классе PDFStreamEngine, но нет информации о найденных там строках.

Любые предложения, по которым эта информация может быть получена из?

4b9b3361

Ответ 1

Вот что я выяснил до сих пор:

PDFBox использует файл ресурсов для привязанных операторов/инструкций PDF к определенным классам, которые затем обрабатывают информацию.

Если мы посмотрим на файл ресурсов PDFTextStripper.properties в разделе:

pdfbox\src\main\resources\org\apache\pdfbox\resources\

мы видим, что, например, оператор BT связан с org.apache.pdfbox.util.operator.BeginText и т.д.

PDFTextStripper в

pdfbox\src\main\java\org\apache\pdfbox\util\

учитывает это и использует обработку PDF с этими классами.

, но все графические объекты игнорируются, поэтому нет информации о структуре подчеркивания или таблицы!

Теперь, если мы посмотрим на файл ресурсов PageDrawer.properties, мы увидим, что он ограничивается почти всеми доступными операторами. Который используется классом PageDrawer в

pdfbox\SRC\главная\Java\орг\Apache\pdfbox\PdfViewer\

Теперь "трюк" должен выяснить, какие графические операторы представляют собой те, кто представляет подчеркивание и таблицы, и использовать их в комбинации с PDFTextStripper.

Теперь это означало бы чтение спецификации файла PDF, которая в настоящее время способна много работать.

Если кто-то знает, какие операторы несут ответственность за какие действия для рисования подчеркиваний и строк таблицы, пожалуйста, дайте мне знать.

Ответ 2

вы можете использовать Itext для создания отчетов в формате PDF.

с помощью itext вы можете легко поставить строки.

попробуйте следующее.

document.add(новый LineSeparator (0.5f, 50, null, 0, 198));

приведенный выше код используется для создания строк в pdf-отчете. и установите размеры в соответствии с вашим выбором.

надеюсь, что это поможет вам.

Ответ 3

Насколько я понял pdfbox, нет опции, по которой вы можете прочитать подчеркивание. Возможно, вы можете попробовать itextpdf для этой цели.

Ответ 4

Как вы отметили - PDFBox использует файлы ресурсов, чтобы привязывать операторы/инструкции PDF к посетителям, которые будут обрабатывать информацию.

Вероятно, лучше всего начать с копирования существующего посетителя в формате PDFBox в свою собственную папку-источник, а затем добавить/расширить реализацию оттуда.

Мой давний опыт PostScript напоминает операторы "moveto" и "lineto". Поскольку PDF ориентирован примерно на PS, вы будете искать что-то подобное.

http://learnpostscript.wordpress.com/category/lineto/

Формат PDF - это b * tch - это HTML, сделано неправильно. Он представляет собой графическую реализацию, а не семантику. Даже реконструировать предложения сложно - слова или даже отдельные персонажи позиционируются, "пространство" или "новая линия" должны быть алгоритмически реконструированы. Короче говоря, Adobe - это * дыры. А Reader - это неэргономичная, небезопасная, небезопасная, раздутая свинья.

Тем не менее, вы можете выполнить свое требование - если вы готовы поставить, скажем, 12 часов работы. Помимо обнаружения по позициям, подчеркивания обычно будут издаваться в PDF сразу после их текста. вы можете защелкнуть ваше обнаружение по заказу PDF-документа, а не только по позиции страницы.

Также попробуйте создать тривиальный двухстрочный PDF с подчеркнутым текстом. Тогда посмотрите, что вы можете сделать, проанализируя его! Подчеркивание должно выходить как собачьи бананы, и как только вы сможете это обнаружить, вы будете хорошо в пути.

PDFBox не очень хорош для расширяемости, это в основном просто большая куча алгоритмов. По этой причине просто скопируйте источник PDFTextStripper (и, возможно, у него есть PageDrawer для справки) и прототип.

Надеюсь, это поможет!

Ответ 5

В соответствии с api getfont() возвращает размер шрифта.

Вы можете использовать метод getStyle() и он вернет STYLE_UNDERLINE для подчеркнутого шрифта. Таким образом, вы можете получить стиль подчеркивания.