2012-09-24 49 views
5

Estoy construyendo una lista vertical de meses con una lista horizontal de días en cada mes. A cada día agrego un rectángulo de tamaño y color; el tamaño y el color dependen de un valor de una consulta db.Cómo centrar Alinear elemento de plantilla en PdfPCell

estoy usando PdfPTable, PdfPCell y cbCreateTemplate proporcionada en this answer

Todo lo demás funciona bien (el tamaño del rectángulo, el color del rectángulo), aparte de la posición del rectángulo: que siempre se coloca en 0,0 a pesar de que (creo) configuré el posicionamiento V & H. Un extracto del código está a continuación; por favor avise.

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); 

Esta es una gráfica de lo que se muestra: should be aligned center/center

Debe ser Center/Centro. ¿Dónde me he equivocado?

Ésta es la parte de código actualizada utilizando la solución aceptada:

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); 

Respuesta

10

va a mezclar text mode y composite mode.

Las propiedades de alineación establecidas en el nivel del PdfPCell funcionan solo en modo de texto. Tan pronto como cambie al modo compuesto (lo hace usando el método addElement()), iText ignora la alineación definida para la celda a favor de la alineación definida para los contenidos de la celda.

En modo texto, todo el contenido tiene la misma alineación. En modo compuesto, puede tener diferentes elementos con diferentes alineamientos.

Tiene diferentes opciones: puede poner el Chunk en un Paragraph y definir la alineación para el párrafo en lugar de para la celda. Puede crear la celda en modo texto usando Phrase que contiene el fragmento. Incluso puede ser posible crear una celda con un Image sin usar un Chunk, etc ...

Todo esto se explica en el libro "iText in Action" que escribí.

+0

Gracias Bruno. Utilicé la solución Frase en una celda y agregué el código actualizado más arriba. – DaveSav

Cuestiones relacionadas