2012-09-24 43 views
5

Tôi đang tạo danh sách các tháng theo chiều dọc với danh sách ngày theo chiều ngang trong mỗi tháng. Mỗi ngày tôi thêm một hình chữ nhật có kích thước và màu; kích thước và màu sắc phụ thuộc vào một giá trị từ truy vấn db.Cách căn chỉnh phần tử mẫu Căn chỉnh trong PdfPCell

Tôi đang sử dụng PdfPTable, PdfPCellcbCreateTemplate cung cấp trong this answer

Mọi thứ khác hoạt động tốt (kích thước của hình chữ nhật, màu sắc của hình chữ nhật), ngoài vị trí của hình chữ nhật: nó luôn luôn đặt ở 0,0 mặc dù tôi (nghĩ) tôi đã đặt định vị V & H. Một đoạn trích của mã dưới đây; xin vui lòng tư vấn cho.

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

Đây là một hình ảnh về những gì đang hiển thị: should be aligned center/center

Nó sẽ được Trung tâm/Trung tâm. Tôi đã đi sai ở đâu?

Đây là phần đang được cập nhật bằng cách sử dụng giải pháp được chấp nhận:

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

Trả lời

10

Bạn đang trộn text modecomposite mode.

Thuộc tính căn chỉnh được đặt ở cấp độ PdfPCell chỉ hoạt động ở chế độ văn bản. Ngay sau khi bạn chuyển sang chế độ tổng hợp (bạn làm như vậy bằng cách sử dụng phương thức addElement()), iText bỏ qua căn chỉnh được xác định cho ô có lợi cho phần được xác định cho nội dung của ô.

Trong chế độ văn bản, tất cả nội dung có cùng căn chỉnh. Trong chế độ tổng hợp, bạn có thể có các phần tử khác nhau với các căn chỉnh khác nhau.

Bạn có các tùy chọn khác nhau: bạn có thể đặt Chunk trong một Paragraph và xác định căn chỉnh cho đoạn thay vì cho ô. Bạn có thể tạo ô ở chế độ văn bản bằng cách sử dụng Phrase có chứa Chunk. Thậm chí có thể tạo một ô có số Image mà không cần sử dụng một Chunk, v.v ...

Điều này được giải thích trong sách "iText in Action" mà tôi đã viết.

+0

Cảm ơn Bruno. Tôi đã sử dụng cụm từ trong một giải pháp Cell và thêm mã được cập nhật ở trên. – DaveSav

Các vấn đề liên quan