Itext 如果使用垂直文本,如何在中心显示文本?

Itext 如果使用垂直文本,如何在中心显示文本?,itext,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);

我的代码

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();
结果:文本在垂直模式下处于中间位置

我想在水平模式下显示文本居中,如下链接:


如何解决此问题?

如文件所述,左对齐、中对齐和右对齐在垂直文本的上下文中具有不同的含义。左边是顶部,中间是中间,右边是底部

使用class
VerticalText
,您总是从右向左书写。目前无法将屏幕截图中显示的文本向右对齐

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

例如,参见我书中的示例。我对该示例的代码进行了如下修改:

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行开始。
我们添加了
电影
,剩下11行。我们已经定义了一个30的前导,这意味着我们已经消耗了(12-11)x30pt=30pt

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

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


现在您已经知道了这个数学,您可以在模拟模式下执行
go()
方法,计算所消耗的宽度,并使用该信息将文本添加到所需的位置。

如果我可以得到文本的宽度以verticalText显示,我将精确设置文本的位置。我怎么做?除此之外,没有在矩形的中心和中间垂直显示文本的方法吗?目前还没有获得该宽度的方法。正如我试图解释的那样:很少有人使用过
垂直文本
,因此这方面的开发很少。啊哈,我看了一个老例子,我可能已经找到了解决方法。我会更新我的答案。这正是一个很好的例子。感谢您的分享:)垂直文本模式下两个字符之间的默认距离有多远(垂直,而不是水平)?我可以更改默认值吗?