我正在建立一个月份的垂直列表,每个月都有一个水平的天数列表。每天我都会添加一个大小有色的矩形;大小和颜色取决于db查询的值。
我使用this answer中提供的PdfPTable
,PdfPCell
和cbCreateTemplate
除了矩形的位置之外,其他一切都很好(矩形的大小,矩形的颜色):它总是位于0,0即使我(想)我已经设置了V& 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);
这是显示的图形:
它应该是中心/中心。我哪里出错?
这是使用已接受的解决方案的更新代码部分:
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);
答案 0 :(得分:10)
您正在混合text mode
和composite mode
。
仅在文本模式下PdfPCell
级别设置的对齐属性。一旦切换到复合模式(通过使用addElement()
方法),iText将忽略为单元格定义的对齐,以支持为单元格内容定义的对齐。
在文本模式下,所有内容都具有相同的对齐方式。在复合模式下,您可以使用不同的对齐方式使用不同的元素。
您有不同的选择:您可以将Chunk
放在Paragraph
中,并定义段落的对齐方式而不是单元格的对齐方式。您可以使用包含Chunk的Phrase
在文本模式下创建单元格。甚至可以使用Image
创建一个不使用Chunk等的单元格......
在我写的“iText in Action”一书中解释了这一点。
答案 1 :(得分:0)
cell1.setHorizontalAlignment(PdfPCell.ALIGN_CENTER)在中心对齐单元格的文本。您可以看到一个示例。
PdfPTable tablaTotal = new PdfPTable(2);
PdfPCell cell1 = new PdfPCell(new Phrase("TOTAL"));
cell1.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
cell1.setPadding(5);
tablaTotal.addCell(cell1);
PdfPCell cell2 = new PdfPCell(new Phrase(contrato.getPrecioInmueble() + " €"));
cell2.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
cell2.setPadding(5);
tablaTotal.addCell(cell2);
我们创建带有两列的tablaTotal,cell1的文本为Total,我们对齐cell1的文本,然后对cell1进行填充和填充。我们对cell2进行相同操作,然后将两个单元格添加到tablaTotal。