gpt4 book ai didi

java - 如何在多行文本周围绘制矩形

转载 作者:行者123 更新时间:2023-12-01 22:24:31 24 4
gpt4 key购买 nike

我正在尝试在 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例子。此示例将同一段落绘制两次。第一次,它添加了一个可能看起来像您已有的解决方案的矩形。第二次,它按照您想要的方式添加一个矩形:

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) 作为矩形的左下角,而是使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com