如何在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
相关产品推荐
相关产品推荐

