Как добавить кастомную клетку таблицы в iText?

Как в iText можно:

  • создать ячейку с изображением
  • задать выравниваение для конкретной ячейки
  • объединить несколько ячеек по горизонтали

Мне нужно чтобы каждая клетка выглядяла так, кто сможет помочь?

введите сюда описание изображения

Баркод это картинка


Ответы (1 шт):

Автор решения: Михаил Ребров

у нас тут имеется таблица с двумя колонками, тремя строками и 4 ячейками, две из которых совмещены по горизонтали.

Какие могут возникнуть вопросы?

Как объединять ячейки

Для этого в ячейке имеется метод setColspan(2) в котором нужно указать, сколько колонок нужно объединить(в данном случае две)

barcodeCell.setColspan(2);

Для объединения ячеек по вертикале сеть метод setRowspan()

Как выравнивать контент

Для этого в параграфе есть метод setAlignment(), в который можно передать константу из класса Element, отвечающую за выравнивание по одной из сторон

priceCaption.setAlignment(Element.ALIGN_RIGHT);

Как вставить картинку

Для этого в ячейку нужно передать экземпляр объекта com.itextpdf.text.Image.
Его можно получить из локального файла следующим образом:

Image.getInstance("/home/michaeldl/projects/stackoverflow/barcode.png")

С основными вопросами разобрались

К делу

Документ

  • Создаем документ,
  • получаем экземпляр PdfWriter, которому передаем OutputStream для записи файла
  • и открываем данный документ для дальнейшей работы с ним
Document document = new Document();
PdfWriter.getInstance(document, Files.newOutputStream(Paths.get("stackoverflow_example.pdf")));
document.open();

Таблица

Создаем таблицу и передаем в конструктор количество колонок (в данном случае 2)

PdfPTable table = new PdfPTable(2);

Ячейка с штрихкодом

  • Создаем ячейку со штрихкодом
  • Объединяем ее со следующей ячейкой по горизонтали
  • Добавляем в ячейку изображение штрихкода полученное из файла, лежащего на диске
  • Добавляем ячейку в таблицу
PdfPCell barcodeCell = new PdfPCell();
barcodeCell.setColspan(2);
barcodeCell.addElement(Image.getInstance("/home/michaeldl/projects/stackoverflow/barcode.png"));
table.addCell(barcodeCell);

Ячейка с артикулом

Когда нам просто нужно создать дефолтную ячейку с текстом, без каких-либо дополнительных действий можно прокинуть содержимое ячейки непосредственно в addCell()

table.addCell(Paragraph.getInstance("0223456"));

Ячейка с ценой

  • Создаем ячейку
  • Создаем надпись с текстом, содержащим цену
  • Устанавливаем выравнивание по правому краю
  • Вставляем надпись в ячейку
  • Вставляем ячейку в таблицу
PdfPCell priceCell = new PdfPCell();
Paragraph priceCaption = new Paragraph("50,00 €");
priceCaption.setAlignment(Element.ALIGN_RIGHT);
priceCell.addElement(priceCaption);
table.addCell(priceCell);

Ячейка с названием товара

  • Создаем ячейку
  • Создаем надпись с текстом, содержащим название товара
  • Устанавливаем выравнивание по центру
  • Объединяем ее со следующей ячейкой по горизонтали
  • Вставляем надпись в ячейку
  • Вставляем ячейку в таблицу
PdfPCell nameCell = new PdfPCell();
Paragraph nameCaption = new Paragraph("+41 Eyewear +41 Eyewear Occhiale Vista Premontato Mix Vista");
nameCaption.setAlignment(Element.ALIGN_CENTER);
nameCell.addElement(nameCaption);
nameCell.setColspan(2);
table.addCell(nameCell);

Финиш

  • Добавляем таблицу в документ
  • Закрываем документ
document.add(table);
document.close();

Итого

public class Test {
    public static void main(String[] args) throws IOException, DocumentException {
        // Создаем документ
        Document document = new Document();
        PdfWriter.getInstance(document, Files.newOutputStream(Paths.get("stackoverflow_example.pdf")));
        document.open();
        // Создаем таблицу
        PdfPTable table = new PdfPTable(2);

        // Ячейка со штрихкодом
        PdfPCell barcodeCell = new PdfPCell();
        barcodeCell.setColspan(2);
        barcodeCell.addElement(Image.getInstance("/home/michaeldl/projects/stackoverflow/barcode.png"));
        table.addCell(barcodeCell);

        // Ячейка со артикулом
        table.addCell(Paragraph.getInstance("0223456"));

        // Ячейка с ценой
        PdfPCell priceCell = new PdfPCell();
        Paragraph priceCaption = new Paragraph("50,00 €");
        priceCaption.setAlignment(Element.ALIGN_RIGHT);
        priceCell.addElement(priceCaption);
        table.addCell(priceCell);

        // Ячейка с названием
        PdfPCell nameCell = new PdfPCell();
        Paragraph nameCaption = new Paragraph("+41 Eyewear +41 Eyewear Occhiale Vista Premontato Mix Vista");
        nameCaption.setAlignment(Element.ALIGN_CENTER);
        nameCell.addElement(nameCaption);
        nameCell.setColspan(2);
        table.addCell(nameCell);

        // добавляем таблицу и закрываем документ
        document.add(table);
        document.close();
    }
}

Результат

https://disk.yandex.ru/i/HGAInQ-zQLz9ag

введите сюда описание изображения

→ Ссылка