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

标签 java pdf itext draw

我正在尝试在 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/

相关文章:

java - alarmmanager 总是在重启后被清除吗?

java - 如何处理具有相同名称的表单字段?

java - 从 PDF 中提取文本位置

java - iText setRowspan 不适用于标题中的表格?

c# - ItextSharp 在尝试打印时需要一个 Dict 对象

java - 推荐一个好的Android开发流程

java - Facebook SDK v3.5.2 - 从封闭 session 请求权限

java - 从 firebase 数据库中删除节点

c# - 使用单点触控将多页文本绘制为 pdf

java - IText AcroField 字符大小