Учебная страница, без клиентских данных.
Проверено: Python 3.10.6; pdfplumber 0.11.10.
Установка: python -m pip install pdfplumber==0.11.10
import pdfplumber
with pdfplumber.open('two-columns.pdf') as pdf:
    p=pdf.pages[0]
    print(p.extract_text())
    print(p.crop((0,0,300,420)).extract_text())
    print(p.crop((300,0,600,420)).extract_text())
Сверьте с pdf-whole.txt и pdf-columns.txt.
Ожидается: общий проход соединяет строки разных проектов.
Проход по областям: все строки проекта А, затем все строки проекта Б.
На иной вёрстке границы областей нужно определить заново.
