Как добавить Абзац в прямоугольник, используя IText

1

Я создал 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, чтобы обернуть мою строку без обрезки?

  • 0
    Ваш код неверен на многих уровнях! cb.beginText() и cb.endText() предназначены для добавления текста в абсолютной позиции на самом низком уровне (синтаксис PDF), но вы добавляете текст с помощью document.add(); который добавляет текст на самом высоком уровне ( Element iText). Как будто вы решили собрать несколько случайных строк кода, не читая никакой документации ...
Теги:
pdf
itextsharp

1 ответ

0
Лучший ответ

Вы создали 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". Книга доступна бесплатно. Там также вопрос и ответ, который объясняет, как рисовать прямоугольник, должно ли это быть одним из ваших требований.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню