Как добавить кастомную клетку таблицы в 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();
}
}

