6

我正在构建一个垂直的月份列表,其中包含每个月的水平天数列表。每天我都在添加一个大小和颜色的矩形;大小和颜色取决于数据库查询中的值。

我正在使用PdfPTablePdfPCellcbCreateTemplate此答案中提供

除了矩形的位置之外,其他一切都很好(矩形的大小,矩形的颜色):它总是定位在 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);
4

2 回答 2

11

你正在混合text modecomposite mode

对齐属性设置的水平PdfPCell仅在文本模式下起作用。一旦您切换到复合模式(您通过使用该addElement()方法执行此操作),iText 就会忽略为单元格定义的对齐方式,而支持为单元格内容定义的对齐方式。

在文本模式下,所有内容都具有相同的对齐方式。在复合模式下,您可以拥有具有不同对齐方式的不同元素。

您有不同的选择:您可以将Chunka放入Paragraph并定义段落而不是单元格的对齐方式。Phrase您可以使用包含块的文本模式创建单元格。甚至可以在Image不使用 Chunk 等的情况下创建一个带有 an 的单元格……

这在我写的“iText in Action”一书中都有解释。

于 2012-09-25T09:56:27.580 回答
0

cell1.setHorizo​​ntalAlignment(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。

于 2020-08-07T21:58:28.303 回答