2014-09-24 24 views
0

我的代碼如果使用verticalText,如何在中心顯示文本?

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

如何解決這個問題呢?

回答

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。

最後,我們添加TEXT2,它分佈在3行。只剩下1條線。所有文本的總橫向寬度爲330pt(我們只剩下30pt)。

現在您已經知道了這個數學方法,您可以在模擬模式下執行go()方法,計算消耗的寬度並使用該信息在您希望的位置添加真實文本。

+0

如果我可以得到文本的寬度顯示verticalText,我會設置文本的位置。我該怎麼做?除了,沒有辦法顯示文字垂直的中心和矩形? – 2014-09-24 14:35:45

+0

目前沒有方法可以獲得該寬度。正如我試圖解釋的那樣:很少有人曾經使用過「VerticalText」,因此在這方面的開發很少。 – 2014-09-24 14:58:49

+0

啊哈,我看了一個老例子,我可能找到了一個解決方法。我會更新我的答案。 – 2014-09-24 15:05:04