iTextPdf 中的单元格之间是否可以有 space?
Is it possible to have space between cells in iTextPdf?
iTextPdf 是否允许在 table 中设置单元格间距?
我有一个包含 2 列的 table,我正在尝试在单元格上绘制边框底部。
我希望每个边框之间的 space 与单元格填充相同。
我正在使用以下代码:
PdfPTable table = new PdfPTable(2);
table.setTotalWidth(95f);
table.setWidths(new float[]{0.5f,0.5f});
table.setHorizontalAlignment(Element.ALIGN_CENTER);
Font fontNormal10 = new Font(FontFamily.TIMES_ROMAN, 10, Font.NORMAL);
PdfPCell cell = new PdfPCell(new Phrase("Performance", fontNormal10));
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell.setHorizontalAlignment(Element.ALIGN_LEFT);
cell.setBorder(Rectangle.BOTTOM);
cell.setPaddingLeft(10f);
cell.setPaddingRight(10f);
table.addCell(cell);
table.addCell(cell);
table.addCell(cell);
table.addCell(cell);
document.add(table);
我该怎么做?
您可能想要这种效果:
这在 my book, more specifically in the PressPreviews 示例中进行了解释。
您需要先去除边框:
cell.setBorder(PdfPCell.NO_BORDER);
并且需要在单元格事件中自己绘制边框:
public class MyBorder implements PdfPCellEvent {
public void cellLayout(PdfPCell cell, Rectangle position,
PdfContentByte[] canvases) {
float x1 = position.getLeft() + 2;
float x2 = position.getRight() - 2;
float y1 = position.getTop() - 2;
float y2 = position.getBottom() + 2;
PdfContentByte canvas = canvases[PdfPTable.LINECANVAS];
canvas.rectangle(x1, y1, x2 - x1, y2 - y1);
canvas.stroke();
}
}
你像这样向单元格声明单元格事件:
cell.setCellEvent(new MyBorder());
在我的示例中,我从单元格的维度中添加或减去 2 个用户单位。在您的情况下,您可以定义一个填充 p
,然后在 PdfPCellEvent
实现中从单元格尺寸中添加或减去 p / 2
。
iTextPdf 是否允许在 table 中设置单元格间距?
我有一个包含 2 列的 table,我正在尝试在单元格上绘制边框底部。 我希望每个边框之间的 space 与单元格填充相同。
我正在使用以下代码:
PdfPTable table = new PdfPTable(2);
table.setTotalWidth(95f);
table.setWidths(new float[]{0.5f,0.5f});
table.setHorizontalAlignment(Element.ALIGN_CENTER);
Font fontNormal10 = new Font(FontFamily.TIMES_ROMAN, 10, Font.NORMAL);
PdfPCell cell = new PdfPCell(new Phrase("Performance", fontNormal10));
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell.setHorizontalAlignment(Element.ALIGN_LEFT);
cell.setBorder(Rectangle.BOTTOM);
cell.setPaddingLeft(10f);
cell.setPaddingRight(10f);
table.addCell(cell);
table.addCell(cell);
table.addCell(cell);
table.addCell(cell);
document.add(table);
我该怎么做?
您可能想要这种效果:
这在 my book, more specifically in the PressPreviews 示例中进行了解释。
您需要先去除边框:
cell.setBorder(PdfPCell.NO_BORDER);
并且需要在单元格事件中自己绘制边框:
public class MyBorder implements PdfPCellEvent {
public void cellLayout(PdfPCell cell, Rectangle position,
PdfContentByte[] canvases) {
float x1 = position.getLeft() + 2;
float x2 = position.getRight() - 2;
float y1 = position.getTop() - 2;
float y2 = position.getBottom() + 2;
PdfContentByte canvas = canvases[PdfPTable.LINECANVAS];
canvas.rectangle(x1, y1, x2 - x1, y2 - y1);
canvas.stroke();
}
}
你像这样向单元格声明单元格事件:
cell.setCellEvent(new MyBorder());
在我的示例中,我从单元格的维度中添加或减去 2 个用户单位。在您的情况下,您可以定义一个填充 p
,然后在 PdfPCellEvent
实现中从单元格尺寸中添加或减去 p / 2
。