2014-12-22 5 views
1

Я создал 2 абзацы и добавили их PARAGRAPH3 таким образом,Как добавить пункт в прямоугольник, используя IText

PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("NextLineTextPDF.pdf")); 
      document.open(); 
      PdfContentByte cb = writer.getDirectContent(); 

      cb.beginText(); 
      BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); 

      Font grey = new Font(bf,12f,0,Color.gray); 
      Chunk blueText = new Chunk(leading1, grey); 
      Font blue = new Font(bf,12f,0,Color.BLUE); 
      Chunk greenText = new Chunk(leading2, blue); 

      Paragraph p1 = new Paragraph(blueText); 
      Paragraph p2 = new Paragraph(greenText); 
      Paragraph p3 = new Paragraph(); 
      p3.add(blueText); 
      p3.add(greenText); 
      document.add(p3); 

      cb.endText(); 

Но проблема в том, если строка внутри PARAGRAPH3 это является lenghty, символы обрезаются и строка не завернута.

Есть ли способ, чтобы я мог заключить свой Paragraph3 в recctangle, чтобы обернуть мою строку без обрезки?

+0

Ваш код неверен на многих уровнях! 'Cb.beginText()' и 'cb.endText()' предназначены для добавления текста в абсолютную позицию на самом низком (синтаксисе PDF), но вы добавляете текст с 'document.add();' который добавляет текст в самый высокий уровень (iText 'Element'). Это как если бы вы решили объединить некоторые случайные строки кода, не прочитав ни одной документации ... –

ответ

0

Вы создали 2 абзаца и добавили их в третий абзац. Могу я спросить, почему?

Хотя вы можете это сделать, это не имеет никакого смысла. Либо вы создаете один Paragraph, состоящий из фрагментов blueText и greenText, либо вы создаете два абзаца, и вы добавляете их на страницу последовательно.

Вы говорите, что хотите добавить эти абзацы в прямоугольник, но вы используете document.add(p). Могу я спросить, почему?

Когда вы используете document.add();, вы указываете iText, чтобы разместить текст для вас в зависимости от размера страницы и ее полей.

Если вы хотите добавить текст в абсолютные позиции, например, в прямоугольник, у вас есть два варианта.

Вы можете сделать это нелегко, используя последовательность операций низкого уровня, как это делается в этом вопросе: Separating redundant code from pdf generator function, но, учитывая ваш уровень знаний, я бы не советовал вам это делать. Если бы я тебя, я смотрел бы на my answer to the question и использовать ColumnText объект:

Добавление пунктов в прямоугольник делается так:

Если rectangle является Rectangle объект определения координат прямоугольника где вы хотите добавить два пункта, то вам нужен этот код:

ColumnText ct = new ColumnText(writer.getDirectContent()); 
ct.setSimpleColumn(rectangle); 
ct.addElement(p1); 
ct.addElement(p2); 
ct.go(); 

Как вы можете видеть, нет никакой необходимости в третьем абзаце. Однако вам нужно быть осторожным и убедиться, что содержимое соответствует прямоугольнику. Прочитайте эти вопросы и ответы, прежде чем приступить к реализации:

Эти вопросы были отобраны для книги "The Best iText Questions on StackOverflow". Книга доступна бесплатно. Также есть вопрос и ответ, в котором объясняется, как рисовать прямоугольник, если это действительно одно из ваших требований.

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