IText - записать общее количество страниц в новый PDF-файл

используя iText, мне нужно создать PDF-файл с большой таблицей PdfPTable и общим количеством страниц в нижнем колонтитуле (что-то вроде «страница X из Y»). Я взглянул на пример это, но я действительно не понимаю, как он работает. На данный момент мой код выглядит примерно так:

        PdfPTable table = new PdfPTable(10);

        //something to fill the table

        baos = new ByteArrayOutputStream();
        document = new Document();
        PdfWriter writer = PdfWriter.getInstance(document, baos);
        document.open();

        PdfTemplate totalPage = writer.getDirectContent().createTemplate(30, 16);
        ColumnText columnTable = new ColumnText(writer.getDirectContent());
        columnTable.addElement(table);

        while(true) {
            ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_RIGHT, new Phrase("Pag. " + String.format("%d", writer.getPageNumber()),FONT_N), (document.right() - document.left())/ 2 + document.leftMargin(), document.bottom(), 0);

            //I think something to insert totalPage in the document...

            columnTable.setSimpleColumn(document.left(), document.top(), document.right(), Math.round(document.bottom()*1.5));

            if (!ColumnText.hasMoreText(columnTable.go()))
                break;

            document.newPage();
        }

        //I think something to set totalPage...

        document.close();

Кто-нибудь может мне помочь?

Поскольку вы новичок в iText, почему вы используете iText 5 или более раннюю версию? Если вы начнете с iText 7, вы обнаружите, что добавлять номера страниц намного проще. Прочтите руководства по Толчок и Строительные блоки. Прямо сейчас вы смотрите на пример, но не читаете руководство (например, старую книгу «iText в действии»). Stack Overflow не заменяет учебное пособие.

Bruno Lowagie 05.04.2018 12:57
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
565
1

Ответы 1

Замените цикл while приведенным ниже кодом:

ColumnText columnTable = new ColumnText(writer.getDirectContent());
        columnTable.addElement(table);
        PdfTemplate totalPage = writer.getDirectContent().createTemplate(30, 16);
        try {
            table.setWidths(new int[]{24, 24, 2 });
            table.setTotalWidth(527);
            table.setLockedWidth(true);
            table.getDefaultCell().setFixedHeight(20);
            table.getDefaultCell().setBorder(Rectangle.BOTTOM);
            table.addCell("");
            table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);
            table.addCell(String.format("Page %d of", writer.getPageNumber()));
            PdfPCell cell = new PdfPCell(Image.getInstance(totalPage));
            cell.setBorder(Rectangle.BOTTOM);
            table.addCell(cell);
            table.writeSelectedRows(0, -1, 34, 803, writer.getDirectContent());
            ColumnText.showTextAligned(totalPage, Element.ALIGN_LEFT, 
                    new Phrase( String.valueOf(writer.getPageNumber())), 
                    0, 0, 0);
        }
        catch(DocumentException de) {
throw new ExceptionConverter(de);

}

Вы должны улучшить свой ответ, объяснив, что делает ваш код и почему это решает проблему OP. Пожалуйста, прочтите Как мне написать хороший ответ?

Mr. T 06.04.2018 09:44

Другие вопросы по теме