iText - 处理现有PDF - 在每个段落的末尾添加破折号

时间:2017-09-12 12:09:32

标签: itext

我需要操纵iText中的现有PDF,在每个段落的末尾添加破折号。像这样:

Tab leaders

我会在Word中使用标签引导来实现此目的。

这是否可以在现有文档上使用iText。

非常感谢任何帮助。

谢谢!

编辑以澄清

iText版本是5.5.x,但我想我们可以升级它,如果新版本的任务更容易。

可能有一些段落不需要破折号,但我对原始PDF有一些控制权。它是从不同的系统组装而成的,我可以在需要领导者的段落中添加一些标记(即我可以在这些段落的末尾添加像#34;〜tab~"这样的文字)。

目前需要这种编辑的文档有页眉和页脚,只有文本和一列具有对齐的对齐。

编辑以获得更多说明

我甚至可以(通过配置)设置特定文档的破折号必须结束的位置(即10px)。我们知道需要以这种方式操作的每种文档类型(及其结构)。

1 个答案:

答案 0 :(得分:2)

这太疯狂了。 您应该将PDF文档视为指令的容器,而不是WYSIWYG格式。因此,找出线条的位置(更不用说段落)非常困难。

高级别计划:

  1. 使用IEventListener处理正在解析的PDF中的事件
  2. 留意TextRenderInfo事​​件,存储它们
  3. 对TextRenderInfo事​​件进行排序,以确保您的事件列表符合逻辑阅读顺序。
  4. 合并列表中的项目,如果它们出现在同一行并且相距小于一定距离(例如,TextRenderInfo指定的字体中距离为3个空格)
  5. 现在你应该有行
  6. 合并线条,如果它们彼此紧密垂直接近并且它们水平重叠。它们应该有多接近,它们重叠多少是你必须弄清楚的,并且可能因页面和文档而有所不同。
  7. 现在你应该有段落
  8. 找出每个段落的边界框。或者更确切地说,凸壳。有一个很好的算法,称为礼品包装算法。
  9. 现在您可以通过检查凸包来简单地插入线条。这是一个简单的步骤。
  10. 如果您可以插入标记,则可以使用iText7轻松完成此操作。 iText7具有IEventListener的实现,允许您在PDF文档中查找正则表达式。它返回找到正则表达式的位置。如果您可以确保您的标记始终满足某种正则表达式,您可以轻松查找它们,获取它们的坐标,并在计算位置插入一条线。

    当然,你需要摆脱标记文本。 为此你可以使用pdfSweep。