我正在尝试在 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();
我知道如何绘制矩形,但无法绘制概述此文本的矩形。
最佳答案
听起来好像您只缺少一 block 拼图来满足您的要求。该部分称为 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) 作为矩形的左下角,而是使用 getYLine()
方法向 ct
对象询问其当前的 Y 位置:
float endPos = ct.getYLine() - 5;
如您所见,我减去了 5 个用户单位,否则矩形的底线将与最后一行文本的基线重合,这看起来不太好。现在我可以使用 endPos
值来绘制矩形,如下所示:
cb.rectangle(300, endPos, 130, 780 - endPos);
cb.stroke();
关于java - 如何在多行文本周围绘制矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29037981/