Намерете местоположение на последния обект на PDF страница с помощта на iTextSharp

Как мога да намеря местоположението и височината на последния обект на PDF страница? Няма долен колонтитул. Искам да подпечатам шаблон под последния елемент. Не в долния колонтитул, а директно под последния ред на текста. Количеството текст може да варира, така че трябва да изчисля дали има достатъчно място в долната част на страницата, за да вмъкна моя шаблон.

Благодаря за всяка помощ, Арън


person Aaron    schedule 15.01.2014    source източник
comment
За да определите къде свършва текстът на дадена страница, погледнете iText в действие, пример за 2-ро издание 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