Вопрос по itext, java – iText - добавить контент в конец существующей страницы

0

Я хочу добавить фрагмент текста на каждую страницу файла PDF.Этот ответ в СО работает отлично. Но текст добавляется в верхнюю часть страницы. Я хотел бы добавить свой текст внизу каждой страницы. Как мне это сделать?

Вот соответствующая часть кода.

    while (iteratorPDFReader.hasNext()) {
        PdfReader pdfReader = iteratorPDFReader.next();

        // Create a new page in the target for each source page.
        while (pageOfCurrentReaderPDF < pdfReader.getNumberOfPages()) {
            document.newPage();
            pageOfCurrentReaderPDF++;
            currentPageNumber++;
            page = writer.getImportedPage(pdfReader, pageOfCurrentReaderPDF);
            cb.addTemplate(page, 0, 0);

            document.add(new Paragraph("My Text here"));  //As per the SO answer

        }
        pageOfCurrentReaderPDF = 0;
    }

Код является частью функции, которая принимает папку, читает файлы PDF в ней и объединяет их в один файл. Итак, я хотел бы добавить текст в сам цикл выше, вместо повторения итерации файла.

Ваш Ответ

3   ответа
2

Посмотри наГлава 6 iText в действии, 2-е издание, особенно в подразделе 6.4.1: Конкатенация и разбиение PDF-документов.

Листинг 6.22,ConcatenateStamp.java, показывает, как вы должны создать PDF из копий страниц (в вашем случае: всех страниц) нескольких других PDF-файлов; образец дополнительно добавляет новыйСтраница X из Y " сноска; это демонстрирует, как вы можете добавлять контент в заданные позиции на страницах при объединении исходных файлов.

Пример не должен провалиться. Я буду управлять этим, как только ям в офисе, чтобы проверить. Вы пробуете пример как есть или уже адаптировали его к своему варианту использования? В последнем случае: как? mkl
Строка ColumnText.showTextAligned в примере выдает ошибку нулевого указателя. Есть идеи почему? janenz00
Я просто запустил пример (используя самые последние версии iText и примеры из iText in Action, 2-е издание), и он был выполнен безупречно. Таким образом, должна быть какая-то проблема с тем, как вы ее запустили. mkl
0

возможноэтот может быть полезным здесь ... Я подозреваю, что вы хотите сделать что-то вроде следующего:

cb.addTemplate(page, 0, 0);

document.add(new Paragraph("My Text here"));  
document.setFooter(new HeaderFooter("Footnote goes here"));
}
pageOfCurrentReaderPDF = 0;
спасибо это мне очень помогло nowhere
@BrunoLowagie у связанного документа была ваша техника, но фрагмент, который я выложил, казался более ясным. hd1
Эта техника не имеетдокументально подтвержден с 2005 года. Он был намеренно опущен в книге, написанной в 2006 году, а функциональность была удалена из iText в 2008 или 2009 году. Bruno Lowagie
Да, моя банка неу него нет класса HeaderFooter. janenz00
5

Если вы хотите автоматически добавлять контент на каждую страницу, вам нужно событие страницы. Это объясняется в главе 5 моей книги iText в действии - второе издание ", Если вы неЕсли у вас есть копия книги, вы можете обратиться к примерам.Вот, Вы также можете найти решения, ища ключевое словоВерхний / нижний колонтитул.

Пример, который выссылается на нене выглядит правильным с первого взгляда. Конечно, вы можете использоватьдва проходаодин для создания контента, другой для добавления верхних и нижних колонтитулов, но предлагаемое решение отличается от рекомендуемого:http://itextpdf.com/examples/iia.php?id=118

Вы копируете ошибку в своем вопросе: с какой стати вы импортируете документ, который выВы только что создали в новый документ, таким образом выбрасывая всю возможную интерактивность выВы добавили в этот документ? Это просто нене имеет смысла. Это'Невероятно, что этот ответ получил так много голосов. Я'м оригинальный разработчик iText и яя совсем не доволен этим ответом!

В вашем случае, возможно, нет необходимости сначала создавать документ в памяти, а потом добавлять нижний колонтитул. Просто взгляните наhttp://itextpdf.com/examples/iia.php?id=104

Вам нужно создатьPdfPageEvent реализация (например, используяPdfPageEventHelper) и вам нужно реализоватьonEndPage() метод.

Документированные предостережения:

Не использоватьonStartPage() добавить контент,Не добавляйте ничего кDocument объект передается на страницу события,Если вы не указали другой размер страницы, нижний левый угол имеет координатуx = 0; y = 0, Вы должны принять это во внимание при добавлении нижнего колонтитула. Значение y для нижнего колонтитула ниже значения y для верхнего колонтитула.

Для получения дополнительной информации: обратитесь к моей книге.

Голосование за "я"м оригинальный разработчик iText », Прокомментируйте свой код. user1566694
Это'странный код Пожалуйста, прочитайтеmanning.com/lowagie2/samplechapter6.pdf для полного обзора, объясняющего, как правильно объединять PDF-файлы. В вашем коде выотбрасывая всю возможную интерактивность (ссылки, аннотации, ...), которая существует в оригинальных документах. Пример на с188 (под заголовком "Добавление контента с помощью PdfCopy ») решает проблему гораздо лучше. Bruno Lowagie
Спасибо за подробный ответ! Я неЯ не владею книгой, но я ссылаюсь на примеры. Код, который я вставил выше, был сформирован из примера кода. Как я уже объяснил, у меня есть несколько файлов, которые необходимо добавить с некоторым содержанием (разным для каждой страницы), а затем объединить в один PDF-файл. Вот тачка для всей функцииpastebin.com/Xn8JzrAz Использует ли он больше ресурсов, чем следовало бы? janenz00
;) Хорошо, пока я публиковал его в качестве ответа, @BrunoLowagie также сослался на образец, наилучшим образом соответствующий требованиям, в своем комментарии здесь ... mkl

Похожие вопросы