如何使用Java创建一个包含三行的表,如下所示:
答案 0 :(得分:1)
所以你想用iText创建一个如下所示的表:
屏幕截图中的PDF是使用TableMeasurements示例创建的。生成的PDF也可以下载以供检查:table_measurements.pdf
在观看此屏幕截图时,第一眼跳到眼睛的事实是表格看起来并不完整"。这意味着我们必须按照昨天已经在SO上解释的方式(以及之前的许多次)完成表格:Why the 2nd row of table won't be written?(实际上是How to generate pdf if our column less than the declared table column和ItextSharp, number of Cells not dividable by the length of the row的副本, Odd Numbered Cell Not Added To Pdf和PdfTable: last cell is not visible以及......)
在评论部分,我被问到:
如何使用没有边框的单元格完成行?
我回答:
使用
table.getDefaultCell().setBorder(Rectangle.NO_BORDER);
请注意,PdfPCell.NO_BORDER
也适用于PdfPCell
扩展Rectangle
类。
在你的情况下,我们有这样的事情:
public void createPdf(String dest) throws IOException, DocumentException {
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
PdfPTable table = new PdfPTable(10);
table.setTotalWidth(Utilities.millimetersToPoints(100));
table.setLockedWidth(true);
table.getDefaultCell().setBorder(PdfPCell.NO_BORDER);
table.addCell(getCell(10));
table.addCell(getCell(5));
table.addCell(getCell(3));
table.addCell(getCell(2));
table.addCell(getCell(3));
table.addCell(getCell(5));
table.addCell(getCell(1));
table.completeRow();
document.add(table);
document.close();
}
为了使示例更加逼真,我创建了一个精确宽度为100 mm的表格。为了确认宽度,我锁定宽度。如前所述,我确保默认单元格没有边框。在添加了不同宽度(10厘米,5厘米,3厘米,2厘米,3厘米,5厘米,1厘米)的所有细胞后,我完成了这一行。
你可能想知道getCell()
方法是什么样的。 Amedee在评论中已经回答了这个问题(出于某些原因你忽略了):
private PdfPCell getCell(int cm) {
PdfPCell cell = new PdfPCell();
cell.setColspan(cm);
cell.setUseAscender(true);
cell.setUseDescender(true);
Paragraph p = new Paragraph(
String.format("%smm", 10 * cm),
new Font(Font.FontFamily.HELVETICA, 8));
p.setAlignment(Element.ALIGN_CENTER);
cell.addElement(p);
return cell;
}
我们创建一个PdfPCell
并设置colspan以反映以cm为单位的宽度。我添加了一些更奇特的东西。我没有使用此示例中的任何功能,但未在官方网站或StackOverflow上进行说明。
有关更多rowpan和colspan示例,请查看Colspan and rowspan中的official documentation部分。