如果使用verticalText,如何在中心显示文本?

时间:2014-09-24 12:05:43

标签: itext

我的代码

VerticalText vt = new VerticalText(writer.getDirectContent());
vt.setVerticalLayout(marginLeft + squareHeight, 1191.0f - marginTop, squareHeight, 3, 20);
vt.setAlignment(Element.ALIGN_CENTER);
Paragraph p = new Paragraph(imgr.getText(), fontV);
p.setLeading(10);
vt.addText(p);
vt.go();

结果:文字在垂直模式中是中间的。

我想在水平模式下显示文字中心如下链接: enter image description here

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

如文档所述,左,中,右对齐在VerticalText的上下文中具有不同的含义。左边是顶部,中间是中间,右边是底部。

使用课程VerticalText,您始终从右向左书写。目前无法将文本对齐,如右侧屏幕截图所示。

但是,您可以先通过在模拟模式下添加垂直文本然后计算已写入的行数来解决此问题。

例如,请参阅我的书中的VerticalText1示例。我已经调整了这个例子的代码:

BaseFont bf = BaseFont.createFont(
    "KozMinPro-Regular", "UniJIS-UCS2-V", BaseFont.NOT_EMBEDDED);
Font font = new Font(bf, 20);
VerticalText vt = new VerticalText(writer.getDirectContent());
vt.setVerticalLayout(390, 570, 540, 12, 30);
vt.addText(new Chunk(MOVIE, font));
vt.go();
System.out.println(vt.getMaxLines());
vt.addText(new Phrase(TEXT1, font));
vt.go();
System.out.println(vt.getMaxLines());
vt.setAlignment(Element.ALIGN_RIGHT);
vt.addText(new Phrase(TEXT2, font));
vt.go();
System.out.println(vt.getMaxLines());

System.out来电的输出是:

11
4
1

这些数字是每个go()之后可用的行数。

我们从setVerticalLayout()方法中定义的12行开始。 我们添加了MOVIE,还剩下11行。我们已经定义了30的领先者,这意味着我们已经消费了(12 - 11)x 30pt = 30pt。

然后我们添加TEXT1,它分布在7行上,宽度为7 * 30pt。总的来说,我们现在消耗了(12 - 4)x 30pt = 240pt。

最后,我们添加分布在3行的TEXT2。只剩下1行。所有文本的总水平宽度为330pt(我们只剩下30pt)。

现在您已了解此数学,您可以在模拟模式下执行go()方法,计算消耗的宽度,并使用该信息在所需位置添加真实文本。