2015-03-13 90 views
0

我想在iText中圍繞多行文本繪製矩形。如何圍繞多行文本繪製矩形

用戶將能夠輸入一些文本行。文本的字體大小可能不同,可以格式化(粗體,下劃線等)。

我使用此代碼繪製文本:

ColumnText ct = new ColumnText(cb); 
Phrase phrase = new Phrase("Some String\nOther string etc...\n test"); 
ct.setSimpleColumn(myText......); 
ct.addElement(phrase); 
ct.go(); 

我知道如何繪製一個矩形,但我不能繪製一個矩形,概述該文本。

+1

請澄清:當你說多行文本,你在說什麼(1)多行文本字段(表單),(2。 )在絕對位置添加了'ColumnText'文本,或者(3.)用'document.add()'添加了'Paragraph'的文本? – 2015-03-13 17:18:02

+0

ColumnText ct = new ColumnText(cb); 短語短語=新短語(「某些字符串\ n其他字符串等... \ n測試」); ct.setSimpleColumn(myText ......); ct.addElement(詞組); ct.go();這是我繪製字符串的方式。 – user2439522 2015-03-13 17:44:36

+0

好的,謝謝!首先我會更新你的問題。如果我有時間,我會給你一個代碼示例。 – 2015-03-13 17:51:16

回答

3

聽起來好像你只是缺少一塊難題來滿足你的要求。那件被稱爲getYLine()

請看看DrawRectangleAroundText的例子。本例將兩次繪製同一段落。第一次,它增加了一個矩形,可能看起來像你已有的解決方案。第二次,它增加了一個矩形,您希望它看起來方式:

enter image description here

第一次,我們添加文字是這樣的:

ColumnText ct = new ColumnText(cb); 
ct.setSimpleColumn(120f, 500f, 250f, 780f); 
Paragraph p = new Paragraph("This is a long paragraph that doesn't" 
     + "fit the width we defined for the simple column of the" 
     + "ColumnText object, so it will be distributed over several" 
     + "lines (and we don't know in advance how many)."); 
ct.addElement(p); 
ct.go(); 

您定義使用的座標色譜柱:

llx = 120; 
lly = 500; 
urx = 250; 
ury = 780; 

這與左下角(120,500),130的寬度和380的高度的矩形。因此繪製矩形這樣的:

cb.rectangle(120, 500, 130, 280); 
cb.stroke(); 

不幸的是,那個矩形太大了。

現在,讓我們再一次添加文本在略微不同的座標:

ct = new ColumnText(cb); 
ct.setSimpleColumn(300f, 500f, 430f, 780f); 
ct.addElement(p); 
ct.go(); 

而不是使用(300,500)爲矩形左下角,我們要求使用其當前Y位置的ct對象該getYLine()方法:

float endPos = ct.getYLine() - 5; 

正如你所看到的,我減去5個用戶單位,否則我的矩形的底線將與文本的最後一行的基線一致,看起來不很漂亮。現在,我可以使用endPos值繪製矩形我這樣的:

cb.rectangle(300, endPos, 130, 780 - endPos); 
cb.stroke(); 
+0

非常感謝Bruno。你的答案是我正在尋找的。謝謝!!! – user2439522 2015-03-16 19:38:00