В createPdf
у вас есть все oop, которое добавляет разделы шаблона со всей таблицей на отдельные страницы:
for (int j = 0; j <5000; j += 1000) {
table.setKeepTogether(true);
document.newPage();
for (int i = 2600; i > 0; i -= 1300) {
clip = canvas.createTemplate(2000, 1300);
clip.addTemplate(tableTemplate, -j, 1750 - i);
canvas.addTemplate(clip, 50, 312);
table.setKeepTogether(true);
//canvas.addImage(image1);
}
}
Каждый раздел имеет ширину 2000 единиц (canvas.createTemplate(2000, 1300)
), но при продвижении к следующему разделу вы только go прямо на 1000 единиц (j += 1000
). Таким образом, каждый новый раздел (кроме первого) повторяет последние три столбца (вторую половину) предыдущего раздела.
Эти повторения можно предотвратить, перейдя сразу на 2000 единиц после каждого раздела, т. Е. Заменив
for (int j = 0; j <5000; j += 1000)
от
for (int j = 0; j <5000; j += 2000)
Кроме того, в вашем коде есть множество других странностей, например
table.setHeaderRows(3);
table.setFooterRows(1);
(здесь вы заявляете, что у вас есть три строки заголовка и одна строка нижнего колонтитула, которые будут автоматически повторяться, если таблица добавляется в Document
напрямую и разбивается на несколько страниц, поскольку вы добавляете таблицу не в Document
, а вручную в шаблон, эта функциональность не используется, что удачно, так как вы создаете только достаточно ячеек, чтобы заполнить две строки, даже недостаточно для объявленных строк заголовка)
и несколько вызовов
table.setKeepTogether(true)
после уже выполнив рендеринг таблицы в
table.writeSelectedRows(0, -1, 0, 800, tableTemplate)
После рендеринга таблицы слишком поздно устанавливать свойства, управляющие процессом рендеринга ...
В коммюнике Однако вы сказали, что хотите иметь только обычную таблицу из 15 столбцов, а не таблицу, столбцы которой распределены по нескольким страницам. В таком случае, почему бы вам просто не сделать
Document document = new Document(PageSize.A1.rotate());
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(directory_path+filename));
document.open();
PdfPTable table = new PdfPTable(15);
table.setWidthPercentage(100);
... create cells and add them to the table ...
document.add(table);
document.close();
Все использование PdfContentByte
, PdfTemplate
и writeSelectedRows
совершенно не нужно для вашего варианта использования.