Вопрос по android, itext – Как центрировать выравнивание элемента шаблона в PdfPCell

5

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

я используюPdfPTable, PdfPCell а такжеcbCreateTemplate предоставляется вэтот ответ

Все остальное работает нормально (размер прямоугольника, цвет прямоугольника), кроме положения прямоугольника: он всегда позиционируется в 0,0, хотя я (думаю) я установил V & amp; H позиционирование. Выдержка из кода ниже; пожалуйста, порекомендуйте.

int Severity = args.getPLR().get(i).getItems().get(j).getItems().get(itemIndex).getSeverity();
Severity = Severity + 5; //plump up, so that max (10) should fill the cell
PdfPCell cell = new PdfPCell();
cell.setPadding(0);
template = cb.createTemplate(Severity, Severity);
template.setLineWidth(0.5f);
template.rectangle(0, 0, Severity, Severity);
//we should switch the color
//based on the Severity
switch ((Severity-5)) {
    case 0:
        template.setColorFill(Color.GREEN);
        break;
    case 1:
        template.setColorFill(Color.GREEN);
        break;
    case 2:
        template.setColorFill(Color.YELLOW);
        break;
    case 3:
        template.setColorFill(Color.YELLOW);
        break;
    case 4:
        template.setColorFill(Color.YELLOW);
        break;
    case 5:
        template.setColorFill(Color.ORANGE);
        break;
    case 6:
        template.setColorFill(Color.ORANGE);
        break;
    case 7:
        template.setColorFill(Color.ORANGE);
        break;
    case 8:
        template.setColorFill(Color.RED);
        break;
    case 9:
        template.setColorFill(Color.RED);
        break;
    case 10:
        template.setColorFill(Color.RED);
        break;
}
template.fill();
img = Image.getInstance(template);        
chunk = new Chunk(img, 0f, 0f);
cell.addElement(chunk);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
painTable.addCell(cell);

Это график того, что показано: should be aligned center/center

Это должен быть Центр / Центр. Где я ошибся?

Это обновленная часть кода с использованием принятого решения:

img = Image.getInstance(template);        
chunk = new Chunk(img, 0f, 0f);
Phrase severityChunk = new Phrase(chunk);
PdfPCell cell = new PdfPCell(severityChunk);
cell.setPadding(0);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
painTable.addCell(cell);

Ваш Ответ

1   ответ
10

Вы смешиваетеtext mode а такжеcomposite mode.

Свойства выравнивания установлены на уровнеPdfPCell работать только в текстовом режиме. Как только вы переключаетесь в композитный режим (вы делаете это, используяaddElement() метод), iText игнорирует выравнивание, определенное для ячейки, в пользу aligment, определенного для содержимого ячейки.

В текстовом режиме все содержимое имеет одинаковое выравнивание. В комбинированном режиме вы можете иметь разные элементы с разными выравниваниями.

У вас есть разные варианты: вы можете поставитьChunk вParagraph и определите выравнивание для абзаца, а не для ячейки. Вы можете создать ячейку в текстовом режиме, используяPhrase который содержит Чанк. Возможно даже создать ячейку сImage без использования чанка и т.д ...

Все это объясняется в «iText in Action». книга, которую я написал.

Спасибо Бруно. Я использовал решение «Фраза в ячейке» и добавил обновленный код выше. DaveSav

Похожие вопросы