使用iText拆分旋转的段落

时间:2018-05-17 14:59:33

标签: java itext

我在Java(版本5.5.9)中使用iText库。我试图将旋转的文本分割成页面上的两个不同的矩形。

首先,考虑一项简单的任务。只需将段落顺时针旋转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 :(得分:0)

以下是我对自己问题的解决方案:

我定义了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