Для решения подобной задачи я писал скрипт, который использовал pdfminer. 
Основные операции, которые он выполнял:
1. конвертировал pdf в xml. Вот пример результата преобразования.
<textbox id="17" bbox="384.771,365.240,431.953,377.063">
<textline bbox="384.771,365.240,431.953,377.063">
<text font="DJHCLP+TT66ACo00" bbox="384.771,365.240,396.357,377.063" size="11.823">N</text>
<text font="DJHCLP+TT66ACo00" bbox="396.337,365.240,408.821,377.063" size="11.823">G</text>
<text font="DJHCLP+TT66ACo00" bbox="408.800,365.240,419.489,377.063" size="11.823">S</text>
<text font="DJHCLP+TT66ACo00" bbox="419.469,365.240,431.953,377.063" size="11.823">O</text>
</textline>
</textbox>
Значение атрибута 
bbox это координаты текста 
X1, Y1, X2, Y2. 
2. парсил xml, создавал "текстовые элементы";
3. вычислял среднее значение 
Y для элементов. Те элементы, у которых средний 
Y одинаковый, принадлежат одной строке, при условии что они находятся на одной странице;
4. сортировал элементы по номеру страницы и среднему 
Y;
5. сортировал элементы принадлежащие одной строке по 
X1;
6. собирал строки в нужном формате из отсортированных элементов.