2015-06-24 9 views
0

У меня есть таблица, в которой в первой строке есть только изображения, а во второй строке есть только описания изображений. Я обрабатываю это, создавая таблицу с размером (столбцами) количества изображений, а затем заполняя ячейки таблицами размером 1 (2 строки = 1-я строка, вторая строка - описание). После установки выравнивания ячеек 1-й строки в центр, вторая строка не будет применять выравнивание, а описание останется слева ... это ошибка?iText - изображение разбивает выравнивание ячейки

Integer size = filepathArray.length; 
    PdfPTable pdfPTable = new PdfPTable(size); 
    for (int i = 0; i < size; i++) { 
     PdfPTable inner = new PdfPTable(1); 
     try { 
      PdfPCell image = new PdfPCell(); 
      PdfPCell description = new PdfPCell(); 
      PdfPCell cell = new PdfPCell(); 
      image.setImage(Image.getInstance(getImageAsByteArray(filepathArray[i]))); 
      image.setFixedHeight(32); 
      image.setBorder(Rectangle.NO_BORDER); 
      image.setHorizontalAlignment(Element.ALIGN_CENTER); 
      inner.addCell(image); 
      description.addElement(new Chunk(filepathArray[i], FontFactory.getFont("Arial", 8))); 
      description.setBorder(Rectangle.NO_BORDER); 
      description.setHorizontalAlignment(Element.ALIGN_CENTER); 
      inner.addCell(description); 
      cell = new PdfPCell(); 
      cell.addElement(inner); // needed to actually remove the border from the cell which contains the inner table because tables have no setter for the border 
      cell.setBorder(Rectangle.NO_BORDER); 
      pdfPTable.addCell(cell); 
     } catch (Exception e) { 
     } 
    } 
    pdfPTable.setHorizontalAlignment(Element.ALIGN_LEFT); 

Результат: изображение сосредоточено, текст не является, никоим образом, я пробовал все! Кроме того, addElement() удаляет все ранее установленные выравнивания (элементы таблицы и ячейки, это ошибка?), Поэтому мне нужно установить выравнивание ПОСЛЕ того, как я добавил контент в ячейку или таблицу.

ответ

1

Это неправильно:

PdfPCell description = new PdfPCell(); 
description.addElement(new Chunk(filepathArray[i], FontFactory.getFont("Arial", 8))); 
description.setHorizontalAlignment(Element.ALIGN_CENTER); 

Это неправильно, потому что вы смешиваете текстовый режим:

PdfPCell description = new PdfPCell(new Phrase(filepathArray[i], FontFactory.getFont("Arial", 8))); 
description.setHorizontalAlignment(Element.ALIGN_CENTER); 

С композитного режима:

PdfPCell description = new PdfPCell(); 
Paragraph p = new Paragraph(filepathArray[i], FontFactory.getFont("Arial", 8)); 
p.setAlignment(Element.ALIGN_CENTER); 
description.addElement(p); 

Кажется, как вы пробовали каждый но с использованием подходов, которые объясняются в документации ;-)

+0

что я должен сказать ... Я ленив при чтении (особенно в документах);) стыдно за меня! Но большое вам спасибо, он работает сейчас! ДА! – Pali

Смежные вопросы