2015-03-13 105 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