You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PDFTron 9.1.0中为TextElement添加下划线?

在PDF右上角创建带下划线的文本标签问题

我正在PDF页面的右上角创建标签,尝试使用com.pdftron.pdf.annots.Underline为文本元素添加下划线,当前代码及问题如下:

原代码示例

Element textElement1 = builder.createTextBegin(Font.create(pdfDoc, Font.e_times_bold_italic), 12);
//writer.writeElement(textElement1);
Element textRun1 = builder.createTextRun("Tab 1");
textElement1.getGState().setTransform(0, -1, 1, 0, 612 - 18, 792-18-72);
textElement1.getGState().setTextRenderMode(GState.e_fill_text);
textElement1.getGState().setFillColorSpace(ColorSpace.createDeviceRGB());
textElement1.getGState().setFillColor(new ColorPt(0, 0, 0)); // 设置文本颜色为黑色

Underline underline =  Underline.create(pdfDoc, new Rect(612 - 18, 792-18-72, 612 - 18, 792-18-12));
underline.setColor(new ColorPt(1, 0, 0)); // 红色

page.annotPushBack(underline);

writer.writeElement(textElement1);
writer.writeElement(textRun1);
writer.writePlacedElement(element1);

代码运行效果

当前代码生成的PDF中,右上角的“Tab 1”文本未正确显示对应下划线,下划线的位置与方向和旋转后的文本不匹配。

问题分析与修正方案

原代码核心问题是下划线未匹配文本的旋转变换,且下划线的Rect坐标设置错误(当前为竖直线条,与旋转后的文本排版不对应)。以下是修正后的代码:

Element textElement1 = builder.createTextBegin(Font.create(pdfDoc, Font.e_times_bold_italic), 12);
Element textRun1 = builder.createTextRun("Tab 1");

// 文本旋转变换:顺时针旋转90度,定位到右上角
double xPos = 612 - 18;
double yPos = 792 - 18 - 72;
textElement1.getGState().setTransform(0, -1, 1, 0, xPos, yPos);
textElement1.getGState().setTextRenderMode(GState.e_fill_text);
textElement1.getGState().setFillColorSpace(ColorSpace.createDeviceRGB());
textElement1.getGState().setFillColor(new ColorPt(0, 0, 0)); // 设置文本颜色为黑色

// 计算旋转后文本的边界,创建匹配的下划线Rect
// 文本"Tab 1"在12号字体下的宽度约为40(可根据实际字体调整),下划线高度设为2
Rect underlineRect = new Rect(xPos - 12, yPos, xPos - 12 + 40, yPos + 2);
Underline underline = Underline.create(pdfDoc, underlineRect);
underline.setColor(new ColorPt(1, 0, 0)); // 设置下划线为红色

// 给下划线应用与文本相同的旋转变换矩阵,保证方向对齐
underline.setMatrix(new Matrix(0, -1, 1, 0, xPos, yPos));

// 先写入文本,再添加注解确保层级正确
writer.writeElement(textElement1);
writer.writeElement(textRun1);
page.annotPushBack(underline);

writer.writePlacedElement(element1);

关键修正点

  • 调整下划线的Rect坐标,匹配旋转后文本的实际宽度与位置
  • 给下划线应用与文本一致的旋转变换矩阵,保证方向对齐
  • 调整文本与注解的写入顺序,避免注解被文本遮挡

内容的提问来源于stack exchange,提问作者Lactus Odinson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 00:45:03