Itext7-如何用java创建每页2列4行的pdf图像



我有以下代码来创建一个包含2列4行的pdf。每个单元格都包含一个图像。

int labelCount = x;
int columns = 2;
int labelsPerPage = 8;
int rows = labelCount/columns;
int resto = labelCount%columns;
if(resto>0) rows++;
String dest = "path_to_pdf_file";
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest));
Document doc = new Document(pdfDoc);
doc.setMargins(0, 0, 0, 0);
Table table = new Table(UnitValue.createPercentArray(columns)).useAllAvailableWidth();
Integer iCount = 0;
for (int i = 1; i <= rows; i++) {
for (int y = 1; y <= columns; y++) {

if(iCount<labelCount) {                 
String fileName = "name_of_image";
Cell cell = new Cell();
cell.add(new com.itextpdf.layout.element.Image(ImageDataFactory.create("full_path_to_image")).setAutoScale(true));
cell.setBorder(Border.NO_BORDER);
table.addCell(cell);
iCount++;

if(iCount==labelsPerPage-1) {
doc.add(new AreaBreak(AreaBreakType.NEXT_PAGE));
}
}
}
}        
doc.add(table);
doc.close();

如果标签数量大于定义的限制(每页8个(,我希望使用以下标签创建一个新页面。

在我的代码中,我使用了

doc.add(new AreaBreak(AreaBreakType.NEXT_PAGE));

但它在一开始就生成了(我不知道为什么(一个空白页。第二页有标签。

动态添加新页面并将剩余内容放入其中的正确方法是什么?

感谢

从本质上讲,在您的代码中,您在添加表之前将AreaBreak添加到文档中,这就是为什么在表之前插入空白页的原因。iText 7此时不允许在表中插入分页符。为了获得所需的结果,您需要在进入下一页之前将现有表刷新到文档中,并为下一页创建一个新表。从本质上讲,您将添加一堆用AreaBreak分隔的表。

不需要对代码进行大量修改的伪代码可以如下所示:

Table table = new Table();
for (...) {
// populate table
if ("it's time to insert a page break") {
doc.add(table);
doc.add(new AreaBreak(AreaBreakType.NEXT_PAGE));
table = new Table(); // create new table
}
}
doc.add(table);

相关内容

  • 没有找到相关文章

最新更新