A mio avviso, l'origine di tutti i problemi è legata alla scelta del formato PDF come sorgente da cui estrarre i dati in formato testo.
Il PDF nasce sostanzialmente per la stampa, quindi le informazioni all'interno sono organizzate in base alle necessità della loro visualizzazione: spesso risulta difficile estrarre righe di testo in modo efficace, salvo usare delle convenzioni; ad esempio, si può considerare tutto il testo con la stessa Y appartenente a un'unica riga, ma non è possibile rilevare quante "righe" vuote ci sono tra diverse porzioni di testo, o quanti caratteri, proprio perché il documento contiene degli output di testo in varie posizioni con diversi stili.
Sarebbe più congeniale usare dei segnaposto individuabili all'interno del documento per effettuare una sostituzione del testo con librerie apposite, oppure ancora partire da un altro formato di documento più "strutturato" dal punto di vista semantico (es. HTML e derivati, XML, ecc.) e fare il rendering del documento finale, magari proprio in PDF, dopo aver sostituito i campi segnaposto con gli effettivi valori.
Ciao!