Я создал 2 абзаца и добавил их в пункт 3 таким образом,
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();
Но проблема в том, что если строка внутри абзаца 3 имеет длину, символы обрезаются, а строка не обертывается.
Есть ли способ, чтобы я мог заключить свой Paragraph3 в recctangle, чтобы обернуть мою строку без обрезки?
Вы создали 2 абзаца и добавили их в третий абзац. Могу я спросить, почему?
Хотя вы можете это сделать, это не имеет никакого смысла. Либо вы создаете один Paragraph
состоящий из blueText
и greenText
, либо создаете два абзаца, и вы добавляете их на страницу последовательно.
Вы говорите, что хотите добавить эти абзацы в прямоугольник, но вы используете document.add(p)
. Могу я спросить, почему?
Когда вы используете document.add();
вы указываете iText, чтобы разместить текст для вас, исходя из размера страницы и ее полей.
Если вы хотите добавить текст в абсолютные позиции, например, в прямоугольник, у вас есть два варианта.
Вы можете сделать это сложным способом, используя последовательность операций низкого уровня, как это делается в этом вопросе: Разделение избыточного кода из функции генератора PDF, но, учитывая ваш уровень знаний, я бы не советовал вам это делать. Если бы я был вами, я бы посмотрел на свой ответ на вопрос и использовал объект ColumnText
:
Добавление абзацев в прямоугольник выполняется следующим образом:
Если rectangle
является объектом Rectangle
определяющим координаты прямоугольника, в который вы хотите добавить два абзаца, тогда вам нужен этот код:
ColumnText ct = new ColumnText(writer.getDirectContent());
ct.setSimpleColumn(rectangle);
ct.addElement(p1);
ct.addElement(p2);
ct.go();
Как вы можете видеть, нет необходимости в третьем абзаце. Однако вам нужно быть осторожным и убедиться, что содержимое соответствует прямоугольнику. Прочтите эти вопросы и ответы перед тем, как начать внедрение:
Эти вопросы были выбраны для книги "Лучшие вопросы iText по StackOverflow". Книга доступна бесплатно. Там также вопрос и ответ, который объясняет, как рисовать прямоугольник, должно ли это быть одним из ваших требований.
cb.beginText()
иcb.endText()
предназначены для добавления текста в абсолютной позиции на самом низком уровне (синтаксис PDF), но вы добавляете текст с помощьюdocument.add();
который добавляет текст на самом высоком уровне (Element
iText). Как будто вы решили собрать несколько случайных строк кода, не читая никакой документации ...