2

由于一些语义分析工作,我需要使用 iTextSharp 从 pdf 文件中识别段落。我知道 iTextSharp 的坐标位于页面的左下角。我找到了定义段落边界的三个特征:

  1. 如果一行中第一个单词的横轴小于一般行的横轴;
  2. 如果连续两行的前导大于一般行的前导;
  3. 如果一行以“.”结尾 并且结束词的横轴小于其他行的横轴

但是,我坚持第二个。我如何知道段落中两行之间的一般引导?我的意思是两个连续的行之间有不同的间隔,因为像“f”、“g”这样的一些字母比“a”、“n”等其他字母需要更多的空间。

谢谢你的帮助!

4

1 回答 1

2

我假设您正在使用 iTextSharp 中提供的解析器功能解析您的 PDF 文件。例如,请参阅使用 iText/iTextSharp 从 PDF 文件中提取字体高度和旋转,以了解其他人在您之前是如何做到这一点的。可以在此处找到更详细的文章:使用开源 PDF 技术解决医疗保健中的非结构化数据问题

您的问题是:我如何计算领先?那就是:我怎么知道两条连续线的基线之间的距离?

当您使用 iTextSharp 解析 PDF 时,您会将每一行视为一系列TextRenderInfo对象。这些对象允许您获取文本的基线:

LineSegment baseline = renderInfo.GetBaseline();
Vector startpoint = baseline.GetStartPoint();

Vector由不同的元素组成:Getting Coordinates of string using ITextExtractionStrategy and LocationTextExtractionStrategy in Itextsharp

你需要startpoint[Vector.I2]. 另请参阅:如何使用 iTextSharp 从 PDF 中检测换行符

两个连续行的该值之间的差异为您提供了现代意义中前导的值。在过去的印刷时代,每个字符都是一个固定大小的块。打印机(人,而不是机器)在成排的块之间放置一条铅,以在线条之间创造一些额外的空间。在现代计算中,这个词被保留了下来,但它的含义发生了变化。不再有“块”,但您可以使用字体大小。字体大小是字体中字形的平均大小。有些字形会占用更多的高度空间,有些会占用更少的空间,但是考虑到前导(基线之间的距离)和字体大小(每个字形的平均高度),您可以对“间距线条”。

于 2016-04-08T06:25:46.660 回答