答案 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 iTextSharp和Itextsharp: 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?
时解释了这一点