Разделение повернутого абзаца с помощью iText - PullRequest
0 голосов
/ 17 мая 2018

Я использую библиотеку iText в Java (версия 5.5.9).Я пытаюсь сделать повернутый текст разделенным на два разных прямоугольника на странице.

Сначала рассмотрим более простую задачу.Просто сделайте абзац повернутым на 90 градусов по часовой стрелке.Я могу сделать это с помощью следующего кода:

final Document document = new Document(PageSize.A3);
document.setMargins(0f, 0f, 0f, 0f);
final PdfWriter pdfWriter = PdfWriter.getInstance(document, outputStream);
document.open();

final String text = "some very long text ...";
final float textWidth = 600f;
final float textHeight = 100f;

final Paragraph paragraph = new Paragraph(text, myFont);
paragraph.setAlignment(Element.ALIGN_JUSTIFIED);
paragraph.setLeading(0f, 1.2f);

final PdfTemplate textTemplate = PdfTemplate.createTemplate(pdfWriter, textWidth, textHeight);

final ColumnText columnText = new ColumnText(textTemplate);
columnText.setSimpleColumn(0, 0, textWidth, textHeight);
columnText.addElement(paragraph);
columnText.go();

final Image textImage = Image.getInstance(textTemplate);
textImage.setInterpolation(true);
textImage.scaleAbsolute(textWidth, textHeight);
textImage.setRotationDegrees(-90f);
textImage.setAbsolutePosition(0f, 800f);

document.add(textImage);

document.close();

Однако текст слишком длинный, чтобы поместиться в этом прямоугольнике.Я хотел бы определить еще один прямоугольник на странице и визуализировать остальную часть текста в этом втором прямоугольнике.Текст должен быть повернут на 90 градусов по часовой стрелке в обоих прямоугольниках.Текст должен быть разделен автоматически (точно так же, как длинный абзац автоматически продолжается на следующей странице).

Возможно ли это с iText?Как?

Спасибо.

1 Ответ

0 голосов
/ 30 мая 2018

Вот мое решение моего собственного вопроса:

Я определяю два экземпляра PdfTemplate, но остаюсь только с одним экземпляром ColumnText. PdfTemplate, связанный с ColumnText, переключается, и метод go() вызывается один раз для каждого шаблона.

Соответствующая часть кода из моего вопроса должна быть изменена следующим образом:

final PdfTemplate textTemplate1 = PdfTemplate.createTemplate(pdfWriter, textWidth, textHeight);
final PdfTemplate textTemplate2 = PdfTemplate.createTemplate(pdfWriter, textWidth, textHeight);

final ColumnText columnText = new ColumnText(textTemplate1);
columnText.setSimpleColumn(0f, 0f, textTemplate1.getWidth(), textTemplate1.getHeight());
columnText.addElement(paragraph);
columnText.go();

columnText.setCanvas(textTemplate2);
columnText.setSimpleColumn(0f, 0f, textTemplate2.getWidth(), textTemplate2.getHeight());
columnText.go();

Метод go() возвращает статус int. Я могу проверить этот статус, если не уверен, есть ли еще текст, который не уместился в последнем шаблоне.

final int goResult = columnText.go();
if (ColumnText.hasMoreText(goResult)) {
    ...
}

Обратите внимание, что мое решение основано на этом примере:

https://developers.itextpdf.com/question/how-continue-field-output-second-page

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...