如何在 iTextpdf 中设置 table 显示
How to set up a table display in iTextpdf
我有一个应用程序,我想在 table 设置中打印发票之类的文档。 table 中的每一行都来自数据库中的单独文档。通过 Db 的迭代不是问题,但我希望它显示如下内容:
我可以提前确定 table 中的总行数,如果这有什么不同的话。有没有人有一段代码可以作为起点?
请看SimpleTable11 example and the PDF that is created when you run that code: simple_table11.pdf
由于您需要不同类型的 PdfPCell
实例(without/with 粗边框、with/without、colspan、left/right 对齐),您将受益于编写辅助方法:
public PdfPCell createCell(String content, float borderWidth, int colspan, int alignment) {
PdfPCell cell = new PdfPCell(new Phrase(content));
cell.setBorderWidth(borderWidth);
cell.setColspan(colspan);
cell.setHorizontalAlignment(alignment);
return cell;
}
使用此方法将使您的代码更易于阅读和维护。
这就是我们创建文档并添加 table:
的方式
public void createPdf(String dest) throws IOException, DocumentException {
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
PdfPTable table = new PdfPTable(5);
table.setWidths(new int[]{1, 2, 1, 1, 1});
table.addCell(createCell("SKU", 2, 1, Element.ALIGN_LEFT));
table.addCell(createCell("Description", 2, 1, Element.ALIGN_LEFT));
table.addCell(createCell("Unit Price", 2, 1, Element.ALIGN_LEFT));
table.addCell(createCell("Quantity", 2, 1, Element.ALIGN_LEFT));
table.addCell(createCell("Extension", 2, 1, Element.ALIGN_LEFT));
String[][] data = {
{"ABC123", "The descriptive text may be more than one line and the text should wrap automatically", ".00", "10", ".00"},
{"QRS557", "Another description", "0.00", "15", ",500.00"},
{"XYZ999", "Some stuff", ".00", "2", ".00"}
};
for (String[] row : data) {
table.addCell(createCell(row[0], 1, 1, Element.ALIGN_LEFT));
table.addCell(createCell(row[1], 1, 1, Element.ALIGN_LEFT));
table.addCell(createCell(row[2], 1, 1, Element.ALIGN_RIGHT));
table.addCell(createCell(row[3], 1, 1, Element.ALIGN_RIGHT));
table.addCell(createCell(row[4], 1, 1, Element.ALIGN_RIGHT));
}
table.addCell(createCell("Totals", 2, 4, Element.ALIGN_LEFT));
table.addCell(createCell(",552.00", 2, 1, Element.ALIGN_RIGHT));
document.add(table);
document.close();
}
正如您所说的那样,您已经有了循环遍历数据库中记录的代码,我使用二维 String
数组模拟了这些记录。
关于 tables 还有很多要说的,但是在 post 任何进一步的问题之前,请阅读关于 Tables[=33 的部分=] 和 Table 事件 在免费电子书 The Best iText Question on Whosebug.
我有一个应用程序,我想在 table 设置中打印发票之类的文档。 table 中的每一行都来自数据库中的单独文档。通过 Db 的迭代不是问题,但我希望它显示如下内容:
我可以提前确定 table 中的总行数,如果这有什么不同的话。有没有人有一段代码可以作为起点?
请看SimpleTable11 example and the PDF that is created when you run that code: simple_table11.pdf
由于您需要不同类型的 PdfPCell
实例(without/with 粗边框、with/without、colspan、left/right 对齐),您将受益于编写辅助方法:
public PdfPCell createCell(String content, float borderWidth, int colspan, int alignment) {
PdfPCell cell = new PdfPCell(new Phrase(content));
cell.setBorderWidth(borderWidth);
cell.setColspan(colspan);
cell.setHorizontalAlignment(alignment);
return cell;
}
使用此方法将使您的代码更易于阅读和维护。
这就是我们创建文档并添加 table:
的方式public void createPdf(String dest) throws IOException, DocumentException {
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
PdfPTable table = new PdfPTable(5);
table.setWidths(new int[]{1, 2, 1, 1, 1});
table.addCell(createCell("SKU", 2, 1, Element.ALIGN_LEFT));
table.addCell(createCell("Description", 2, 1, Element.ALIGN_LEFT));
table.addCell(createCell("Unit Price", 2, 1, Element.ALIGN_LEFT));
table.addCell(createCell("Quantity", 2, 1, Element.ALIGN_LEFT));
table.addCell(createCell("Extension", 2, 1, Element.ALIGN_LEFT));
String[][] data = {
{"ABC123", "The descriptive text may be more than one line and the text should wrap automatically", ".00", "10", ".00"},
{"QRS557", "Another description", "0.00", "15", ",500.00"},
{"XYZ999", "Some stuff", ".00", "2", ".00"}
};
for (String[] row : data) {
table.addCell(createCell(row[0], 1, 1, Element.ALIGN_LEFT));
table.addCell(createCell(row[1], 1, 1, Element.ALIGN_LEFT));
table.addCell(createCell(row[2], 1, 1, Element.ALIGN_RIGHT));
table.addCell(createCell(row[3], 1, 1, Element.ALIGN_RIGHT));
table.addCell(createCell(row[4], 1, 1, Element.ALIGN_RIGHT));
}
table.addCell(createCell("Totals", 2, 4, Element.ALIGN_LEFT));
table.addCell(createCell(",552.00", 2, 1, Element.ALIGN_RIGHT));
document.add(table);
document.close();
}
正如您所说的那样,您已经有了循环遍历数据库中记录的代码,我使用二维 String
数组模拟了这些记录。
关于 tables 还有很多要说的,但是在 post 任何进一步的问题之前,请阅读关于 Tables[=33 的部分=] 和 Table 事件 在免费电子书 The Best iText Question on Whosebug.