используя 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();
Кто-нибудь может мне помочь?




Замените цикл 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. Пожалуйста, прочтите Как мне написать хороший ответ?
Поскольку вы новичок в iText, почему вы используете iText 5 или более раннюю версию? Если вы начнете с iText 7, вы обнаружите, что добавлять номера страниц намного проще. Прочтите руководства по Толчок и Строительные блоки. Прямо сейчас вы смотрите на пример, но не читаете руководство (например, старую книгу «iText в действии»). Stack Overflow не заменяет учебное пособие.