根据一些q& a我明白iText文本提取工具由于PDF规范不支持而无法识别下划线和删除线字体属性。为了允许识别,我通过添加形状子路径识别来更新PdfContentStreamProcessor.java。我还添加了ShapeRenderInfo.java来包含图形信息。
例如,识别下划线意味着从TextRenderInfo对象开始并扫描所有ShapeRenderInfo以尝试匹配(矩形包含/交叉...等))通过阅读q& a我明白iText文本提取工具不支持下划线(透视,重击,...)字体属性识别由于PDF规范允许仅通过在文本下绘制形状下划线。 为了实现下划线识别,我确实通过添加形状子路径管理来更新PdfContentStreamProcessor.java,我还添加了ShapeRenderInfo.java来包含图形渲染参数。
我的想法是通过从TextRenderInfo和ShapeRenderInfo获取Rectangles2D并检查它们之间的包含/交集来识别下划线。
我正在做的事情意味着当前iText如何向RenderListener传递事件有明显的变化,因为它们目前在pdf流中遇到传播,相反我需要首先收集XxxxxRenderObjects,然后在页面结束时传递,因此允许通过矩形搜索。
简而言之:TextRenderInfo上的isUnderline()方法将开始扫描收集的形状,试图将图形对象矩形与文本矩形相匹配。
除了需要更新RenderListener.java以允许ShapeRender事件传播之外,我确实确定了以下可能的解决方案来实现逻辑更改:
1)更新实现新事件传递策略的PdfContentStreamProcessor
2)通过插入一个能够处理逻辑的新层(一个新的侦听器)来屏蔽PdfContentStreamProcessor和RenderListener
我向iText团队提出的问题是:什么是最佳选择?你有进一步的建议吗?
事先谢谢
JQ。
答案 0 :(得分:0)
由于iText没有提供所有必需的事件,我通过添加必要的PDF命令处理来修改PdfContentStreamProcessor(参见PDF参考第8章)然后我写了一个新的处理程序RenderListenerExtended来添加形状处理功能。 然后在第2点之后实施了新的逻辑(下划线,上划线等所需的......)。测试正在进行中。 JQ