Найти местоположение последнего объекта на странице PDF с помощью iTextSharp

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

Спасибо за любую помощь, Аарон


person Aaron    schedule 15.01.2014    source источник
comment
Чтобы определить, где заканчивается текст на данной странице, взгляните на пример iText в действии, второе издание ShowTextMargins, который анализирует PDF-файл и добавляет прямоугольник, показывающий текстовое поле.   -  person mkl    schedule 16.01.2014
comment
Это сработало отлично. Спасибо за ссылку.   -  person Aaron    schedule 16.01.2014
comment
Как мне показать, что на этот вопрос был дан ответ в комментариях?   -  person Aaron    schedule 16.01.2014
comment
Я создал фактический ответ с содержанием моего комментария. Теперь вы можете принять этот ответ, как обычно.   -  person mkl    schedule 16.01.2014


Ответы (1)


Чтобы определить, где заканчиваются текст и (растровые) изображения на данной странице, взгляните на iText в действии, пример 2-го издания ShowTextMargins, который анализирует PDF-файл и добавляет прямоугольник, показывающий поля текста и (растровых) изображений.

    PdfReader reader = new PdfReader(src);
    PdfReaderContentParser parser = new PdfReaderContentParser(reader);
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(RESULT));
    TextMarginFinder finder;
    for (int i = 1; i <= reader.getNumberOfPages(); i++) {
        finder = parser.processContent(i, new TextMarginFinder());
        PdfContentByte cb = stamper.getOverContent(i);
        cb.rectangle(finder.getLlx(), finder.getLly(),
            finder.getWidth(), finder.getHeight());
        cb.stroke();
    }
    stamper.close();
    reader.close();

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

Обновление: начиная с версии 5.5.6 iText расширяет пакет синтаксического анализатора, чтобы включить синтаксический анализ векторной графики. Это позволяет расширить исходный класс TextMarginFinder, реализующий новые методы ExtRenderListener, представленные в этом ответе, что приводит к аналогичному классу < a href="https://github.com/mkl-public/testarea-itext5/blob/master/src/main/java/mkl/testarea/itext5/content/MarginFinder.java" rel="nofollow noreferrer">MarginFinder который учитывает не только текст, но и другой контент, например растровые изображения и векторную графику.

person mkl    schedule 16.01.2014
comment
Есть ли способ сделать это, если у вас есть нижний колонтитул на странице? т. е. я хочу вставить некоторый текст между последним битом текста и нижним колонтитулом, но TextMarginFinder просто находит нижний колонтитул. - person Rowan; 02.02.2016
comment
@Rowan Есть ли способ сделать это, если у вас есть нижний колонтитул на странице? - У меня есть два варианта: 1 Если вы знаете о ваших документах, что нижний колонтитул (если он есть) всегда находится ниже определенной координаты y, а содержимое всегда выше нее, тогда вы можете отфильтровать ввод TextMarginFinder, чтобы брать только содержимое выше эту строку учитывать. Кроме того, 2 вы можете использовать FreeSpaceFinder[Ext] из этого ответа, чтобы найти достаточно большие участки пустого пространства. на странице, в вашем случае она должна быть такой же ширины, как страница. - person mkl; 02.02.2016