2015-04-01 5 views
2

Позволяет ли iTextPdf устанавливать интервалы между ячейками в таблице?Возможно ли иметь пространство между ячейками в iTextPdf?

У меня есть стол с 2 колонками, и я пытаюсь нарисовать рамку-снизу на ячейке. Я хочу, чтобы пространство между каждой границей было таким же, как заполнение ячейки.

Я использую ниже код:

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); 

Как мне это сделать?

ответ

3

Вы, вероятно, хотите этот эффект:

enter image description here

Это объясняется в my book, более конкретно в 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, а затем добавить или вычесть p/2 из размеров ячейки в вашей реализации PdfPCellEvent.

+0

@Jens Любая идея, как я мог отображать только внутренние прямоугольники в приведенном выше примере и не включать внешнюю таблицу? – ericleit

+0

@ericleit Что значит «внутренний прямоугольник»? – Jens

+0

@Jens Я имел в виду границы уровня ячейки в отличие от границы уровня стола, но я понял это, установив границу таблицы на 0. Спасибо за ответ! – ericleit

Смежные вопросы