2012-09-24 22 views
5

Ich baue eine vertikale Liste von Monaten mit einer horizontalen Liste von Tagen in jedem Monat. Zu jedem Tag füge ich ein großes und farbiges Rechteck hinzu; Die Größe und Farbe hängt von einem Wert aus einer DB-Abfrage ab.So zentrieren Sie Vorlagenelement in PdfPCell zentrieren

Ich bin mit PdfPTable, PdfPCell und cbCreateTemplate vorgesehen in this answer

Alles andere funktioniert gut (die Größe des Rechtecks, die Farbe des Rechtecks), abgesehen von der Position des Rechtecks: es immer positioniert ist, an 0,0 obwohl ich (denke) habe ich die V & H Positionierung eingestellt. Ein Auszug des Codes ist unten; Bitte beraten.

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

Dies ist eine Grafik, was gezeigt wird: should be aligned center/center

Es sollte Mitte/Mitte sein. Wo bin ich falsch gelaufen?

Dies ist der aktualisierte Code Teil der akzeptierten Lösung mit:

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

Antwort

10

Sie Misch text mode und composite mode.

Ausrichtungseigenschaften, die auf der Ebene PdfPCell festgelegt sind, funktionieren nur im Textmodus. Sobald Sie in den Composite-Modus wechseln (Sie tun dies mit der Methode addElement()), ignoriert iText die für die Zelle definierte Ausrichtung zugunsten der für den Inhalt der Zelle definierten Ausrichtung.

Im Textmodus hat der gesamte Inhalt die gleiche Ausrichtung. Im Composite-Modus können Sie verschiedene Elemente mit unterschiedlichen Ausrichtungen verwenden.

Sie haben verschiedene Optionen: Sie können die Chunk in eine Paragraph setzen und die Ausrichtung für den Absatz statt für die Zelle definieren. Sie können die Zelle im Textmodus mit einer Phrase erstellen, die den Chunk enthält. Es kann sogar möglich sein, eine Zelle mit einem Image zu erstellen, ohne einen Chunk usw. zu verwenden.

Dies wird alles in dem "iText in Action" Buch, das ich schrieb, erklärt.

+0

Danke Bruno. Ich habe die Lösung "Phrase in a Cell" verwendet und den oben aufgeführten aktualisierten Code hinzugefügt. – DaveSav

Verwandte Themen