在Itext5中,为了设置表中的位置,我们通常使用下面的代码片段
public static void writeContentInTable(PdfWriter writer, PdfPTable pTable, int xPos, int yPos) {
try {
pTable.writeSelectedRows(0, -1, xPos, yPos, writer.getDirectContent());
} catch(Exception e) {
//Logging Errors
}
}
现在,在将代码从Itext5迁移到Itext7时,我面临着复制相同内容的挑战。你能建议我复制一模一样吗?我们可以用下面的类复制相同的操作吗?
com.itextpdf.layout.element.Table;
com.itextpdf.kernel.pdf.PdfWriter;
PdfPTable的目的。writeSelectedRows是在绝对位置写入一个表。
在IText7中,有另一种方法可以通过table . setfixedposition
来指定表的绝对位置。为元素的绝对重定位设置值。的控件的左下角对应指定的坐标元素,它向上生长。还有一个副作用就是元素的属性。POSITION改为fixed
你的方法可以像这样:
public static void writeContentInTable(PdfWriter pdfWriter, Table table, int xPos, int yPos) {
try {
PdfDocument pdf = new PdfDocument(pdfWriter);
try (Document document = new Document(pdf)) {
table.setFixedPosition(xPos, yPos, table.getWidth());
document.add(table);
}
} catch(Exception e) {
//Logging Errors
}
}
将一个表写入某个位置的示例:
public class TestClass {
@Test
public void pdfTableTest() throws IOException {
PdfWriter pdfWriter = new PdfWriter("D:\test.pdf");
Table table = createTableExample();
writeContentInTable(pdfWriter, table, 50, 500);
}
public static void writeContentInTable(PdfWriter pdfWriter, Table table, int xPos, int yPos) {
try {
PdfDocument pdf = new PdfDocument(pdfWriter);
try (Document document = new Document(pdf)) {
writeContentInTable(document, table, xPos, yPos);
}
} catch(Exception e) {
//Logging Errors
}
}
public static void writeContentInTable(Document document, Table table, int xPos, int yPos) {
table.setFixedPosition(xPos, yPos, table.getWidth());
document.add(table);
}
private Table createTableExample() {
Table table = new Table(3);
Cell cell = new Cell(1, 3)
.setTextAlignment(TextAlignment.CENTER)
.add("Cell with colspan 3");
table.addCell(cell);
cell = new Cell(2, 1)
.add("Cell with rowspan 2")
.setVerticalAlignment(VerticalAlignment.MIDDLE);
table.addCell(cell);
table.addCell("Cell 1.1");
table.addCell(new Cell().add("Cell 1.2"));
table.addCell(new Cell()
.add("Cell 2.1")
.setBackgroundColor(Color.LIGHT_GRAY)
.setMargin(5));
table.addCell(new Cell()
.add("Cell 1.2")
.setBackgroundColor(Color.LIGHT_GRAY)
.setPadding(5));
return table;
}
}