Java中如何获取iText7 Paragraph对象的文本内容
iText 7.1.2 提取Paragraph对象内文本的实现方案
iText 7的Paragraph类没有提供直接获取整段纯文本的API,所有添加到段落里的内容(包括直接传入的字符串、显式创建的Text对象)都会以子节点的形式存储在内部结构中,遍历子节点提取Text类型节点的内容即可拿到完整文本。
具体实现逻辑
- 遍历Paragraph的子节点集合
- 识别子节点中的
Text类型对象,拼接其存储的文本内容 - 传入目标Paragraph对象调用提取逻辑,即可得到完整文本用于打印
代码示例
文本提取工具方法
import com.itextpdf.layout.element.IElement; import com.itextpdf.layout.element.Text; import com.itextpdf.layout.element.Paragraph; import java.util.List; public class ParagraphTextUtil { public static String getParagraphText(Paragraph para) { StringBuilder textBuilder = new StringBuilder(); List<IElement> childElements = para.getChildren(); for (IElement child : childElements) { // 直接add传入的字符串会被iText自动包装为Text对象,统一处理即可 if (child instanceof Text) { textBuilder.append(((Text) child).getText()); } // 如果段落内嵌套了Span、Link等其他内联元素,可在此处增加类型判断递归提取 } return textBuilder.toString(); } }
业务代码调用方式
在原有代码中创建完Paragraph对象后,直接调用工具方法打印即可:
Paragraph p = new Paragraph(new Text("Content1")) .add(" Content2"); // 打印提取到的段落文本 System.out.println(ParagraphTextUtil.getParagraphText(p));
运行后控制台输出结果为:
Content1 Content2
注意事项
- 该方案完全适配iText 7.1.2版本,不需要引入额外依赖,也不需要触发PDF渲染流程
- 如果段落中存在嵌套的文本容器(比如
Span、Link),只需要在工具方法中补充对应类型的判断,递归遍历其子节点提取Text内容即可覆盖所有复杂场景 - 不要使用PDF渲染阶段的事件监听提取文本,该类方案仅用于提取已经渲染到PDF页面的内容,不适合提取内存中未排版的Paragraph对象文本
- 自定义的继承自Paragraph的子类(比如你代码里的
LineCountingParagraph)也可以直接使用该工具方法提取文本
内容的提问来源于stack exchange,提问作者Kishore Kumar Korada
相关产品推荐
相关产品推荐

