如何在itextsharp中拆分列?

时间:2016-01-27 10:30:02

标签: asp.net itextsharp

我有200列。我想在一页中设置50列,共4页。我用

doc.NewPage() 

但它在我的页面中没有影响?如何将这个200列拆分为4页中的50列。现在看起来像

enter image description here

1 个答案:

答案 0 :(得分:1)

有不同的方法可以做到这一点。

第一种方式在我对What's an easy to print "first right, then down"?问题的回答中解释

TableTemplate示例中,我们将完整表格编写为比单个页面大得多的PdfTemplate

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);
    }
}
PdfContentByte canvas = writer.getDirectContent();
PdfTemplate tableTemplate = canvas.createTemplate(1500, 1300);
table.writeSelectedRows(0, -1, 0, 1300, tableTemplate);

表格完成后,您可以在不同页面上分发tableTemplate对象:

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();
    }
}

如果这是您要执行的操作,那么您的问题与itext -- what's an easy to print "first right, then down"

重复

第二种方式是使用writeSelectedRows()方法。在这种情况下,您的问题与Auto Split Columns using iTextSharpItextsharp: Adjust 2 elements on exactly one page

重复

第二版iText in Action中的Zhang示例向您展示了此方法的工作原理:

PdfContentByte canvas = writer.getDirectContent();
// draw the first two columns on one page
table.writeSelectedRows(0, 2, 0, -1, 236, 806, canvas);
document.newPage();
// draw the remaining two columns on the next page
table.writeSelectedRows(2, -1, 0, -1, 36, 806, canvas);

第一次,我们使用writeSelectedRows,我们将第0列到第2列(不包括在内)和第0行绘制到页面上的总行数。第二次,我们绘制所有列,从第2列开始,以及所有行。

第三种方式是将页面大小调整为表格大小。我在回答问题How to define the page size based on the content?

时解释了这一点