Вам определенно нужно отрендерить PDF.Вы можете использовать что-то вроде Попплера, а затем искать белые области.Вот Android-приложение с открытым исходным кодом, использующее poppler, которое вы можете изменить / использовать в качестве вдохновения:
http://code.google.com/p/apdfviewer/
Получив отрендеренный PDF, вы можете использовать что-то вроде Boyer-Более алгоритм поиска строки , чтобы найти место.Т.е. в 1D вы пытаетесь найти строку "......." в "+++ ... ++ ..... + ..........." где.= белый и + = не белый.
В 2D все будет сложнее, самая эффективная вещь, о которой я могу подумать, примерно такая:
- Поиск по строке, пока вынайдите достаточно места.
- Перейдите к следующей строке и выполните поиск вдоль нее до точки, в которой вы находились в строке выше.
- Если вы найдете место до этого, повторите шаг 2, затем продолжите.
Если вы понимаете, что я имею в виду ... что-то вроде этого:
void search(int row, int space_pos, int space_height_so_far)
{
for (int x = find_next_space(row, 0); x < space_pos; x = find_next_space(row, x+1))
{
search(row+1, x, 0);
}
if (is_space(row, space_pos))
{
if (space_height_so_far > ?)
cout << "Space found at " << row << ", " << space_pos << endl;
else
search(row+1, previous_space_pos, space_height_so_far);
}
}
Хм, я уже вижу несколько вещей не так с этим кодом ... но, надеюсь, вы получитеидея.Я ожидаю, что этот алгоритм уже существует, но, к сожалению, я не знаю его имени.