namespace UglyToad.PdfPig.DocumentLayoutAnalysis.ReadingOrderDetector
{
using System.Collections.Generic;
using System.Linq;
///
/// Algorithm that retrieve the blocks' reading order using rendering order (TextSequence).
///
public class RenderingReadingOrderDetector : IReadingOrderDetector
{
///
/// Create an instance of rendering reading order detector, .
/// This detector uses the rendering order (TextSequence).
///
public static RenderingReadingOrderDetector Instance { get; } = new RenderingReadingOrderDetector();
///
/// Gets the blocks in reading order and sets the .
///
/// The s to order.
public IEnumerable Get(IReadOnlyList textBlocks)
{
int readingOrder = 0;
foreach (var block in textBlocks.OrderBy(b => AvgTextSequence(b)))
{
block.SetReadingOrder(readingOrder++);
yield return block;
}
}
private double AvgTextSequence(TextBlock textBlock)
{
return textBlock.TextLines.SelectMany(tl => tl.Words).SelectMany(w => w.Letters).Select(l => l.TextSequence).Average();
}
}
}