itext——什么';“这是一个容易打印的文件”;先向右,然后向下”;

itext——什么';“这是一个容易打印的文件”;先向右,然后向下”;,itext,Itext,我想打印一个PdfPTable,其中包含的行和列比一页PDF中包含的行和列多得多 我想打印“先右后下”,这类似于行主顺序。打印满行的第一页,但打印这些行的所有列。然后打印下一页的所有行,然后再次打印这些行的所有列 据我所知,iText可以处理一个PdfPTable,其中包含的行数超过了页面上的行数,但不能处理超过页面上的列数。所以我自己把柱子分开。但这意味着我最终会打印“先向下,然后向右”,这不是我想要的 有没有一个简单的方法来做我想做的事?请注意,我没有提前知道行高度,因为我在PdfPCell

我想打印一个
PdfPTable
,其中包含的行和列比一页PDF中包含的行和列多得多

我想打印“先右后下”,这类似于行主顺序。打印满行的第一页,但打印这些行的所有列。然后打印下一页的所有行,然后再次打印这些行的所有列

据我所知,iText可以处理一个
PdfPTable
,其中包含的行数超过了页面上的行数,但不能处理超过页面上的列数。所以我自己把柱子分开。但这意味着我最终会打印“先向下,然后向右”,这不是我想要的

有没有一个简单的方法来做我想做的事?请注意,我没有提前知道行高度,因为我在
PdfPCell
对象上调用了
setMinimumHeight()

我能想到的唯一方法是,像以前一样,首先拆分列,这很笨拙。然后,对于适合一页的每一列序列,只要合适,就将行逐个添加到
PdfPTable
。如果他们不这样做,那就是我们需要拆分行的地方。最后,我们为每组行和列创建
PdfPTable
对象。我们需要将它们全部保存在内存中,并以正确的(行主)顺序将它们添加到PDF文档中


这看起来很不雅观,所以我想看看是否有更干净的解决方案。谢谢。

如果您有非常大的表,维护概览和将表分布到不同页面的最优雅的方法是将表添加到一个非常大的
PdfTemplate
对象,然后将该
PdfTemplate
对象的裁剪部分添加到不同的页面

这就是我在示例中所做的

我创建了一个15列的表,总宽度为1500pt

PdfPTable table = new PdfPTable(15);
table.setTotalWidth(1500);
PdfPCell cell;
for (int r = 'A'; r <= 'Z'; r++) {
    for (int c = 1; c <= 15; c++) {
        cell = new PdfPCell();
        cell.setFixedHeight(50);
        cell.addElement(new Paragraph(String.valueOf((char) r) + String.valueOf(c)));
        table.addCell(cell);
    }
}
现在您有了表单XObject,可以在每个页面上重复使用它,如下所示:

PdfTemplate clip;
for (int j = 0; j < 1500; j += 500) {
    for (int i = 1300; i > 0; i -= 650) {
        clip = canvas.createTemplate(500, 650);
        clip.addTemplate(tableTemplate, -j, 650 - i);
        canvas.addTemplate(clip, 36, 156);
        document.newPage();
    }
}
PdfTemplate剪辑;
对于(int j=0;j<1500;j+=500){
对于(int i=1300;i>0;i-=650){
clip=canvas.createTemplate(500650);
clip.addTemplate(tableTemplate,-j,650-i);
canvas.addTemplate(clip,36156);
document.newPage();
}
}
结果是第1页的单元格A1至M5、第2页的单元格N1至Z5、第3页的单元格A6至M10、第4页的单元格N6至Z10、第5页的单元格A11至M15以及第6页的单元格N11至Z15

这回答了谷歌周五发布的所有答案

PdfTemplate clip;
for (int j = 0; j < 1500; j += 500) {
    for (int i = 1300; i > 0; i -= 650) {
        clip = canvas.createTemplate(500, 650);
        clip.addTemplate(tableTemplate, -j, 650 - i);
        canvas.addTemplate(clip, 36, 156);
        document.newPage();
    }
}