听起来好像你只是缺少一块难题来满足你的要求。那件被称为getYLine()
。
请看看DrawRectangleAroundText的例子。本例将两次绘制同一段落。第一次,它增加了一个矩形,可能看起来像你已有的解决方案。第二次,它增加了一个矩形,您希望它看起来方式:
第一次,我们添加文字是这样的:
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();
请澄清:当你说多行文本,你在说什么(1)多行文本字段(表单),(2。 )在绝对位置添加了'ColumnText'文本,或者(3.)用'document.add()'添加了'Paragraph'的文本? – 2015-03-13 17:18:02
ColumnText ct = new ColumnText(cb); 短语短语=新短语(“某些字符串\ n其他字符串等... \ n测试”); ct.setSimpleColumn(myText ......); ct.addElement(词组); ct.go();这是我绘制字符串的方式。 – user2439522 2015-03-13 17:44:36
好的,谢谢!首先我会更新你的问题。如果我有时间,我会给你一个代码示例。 – 2015-03-13 17:51:16