Jeśli chcesz to obsługiwać za pomocą WINAPI, to powinieneś spojrzeć na te funkcje:
https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-setwindowextex
https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-setviewportextex
https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-setviewportorgex
https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-setwindoworgex
Zwróć uwagę, że te funkcje zadziałają, kiedy ustawisz odpowiedni tryb za pomocą tej funkcji:
https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-setmapmode
Generalnie pomysł na drukowanie w Windowsie był taki, że nie trzeba skalować czcionki i każdego elementu wydruku indywidualnie, tylko rysujesz sobie na ekranie (w oknie) to co chcesz za pomocą zwykłych funkcji rysujących, a potem zamiast kontekstu okna dajesz kontekst drukarki (pobrany np. przez tę funkcję):
https://docs.microsoft.com/en-us/previous-versions/windows/desktop/legacy/ms646940(v=vs.85)
I wszystko się ładnie drukuje, tylko oczywiście jest za małe na wydruku. I teraz używając tych czterech funkcji ustawiasz globalne skalowanie i przesunięcie początku układu. To jest trochę "pomigane", musisz poeksperymentować, ale działa.
Musisz jeszcze użyć czterech funkcji pomocniczych (początek drukowania, początek strony, koniec strony i koniec drukowania):
https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-startdocw
https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-startpage
https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-endpage
https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-enddoc
Kontekst zwracany przez PrintDlg trzeba zwolnić.
Ale jest jeszcze droga przez Postscript. Jeśli masz drukarkę postscriptową, albo możesz zainstalować jakąś wirtualną drukarkę postscriptową (może konwertująca w locie do pdf-a, musisz poszukać, na pewno znajdziesz), to wtedy tworzysz zwykły plik tekstowy w PostScripcie i go wysyłasz do drukarki. W ostateczności instalujesz Ghostscripta, do niego wysyłasz PostScript, a z niego drukujesz na czym chcesz.
PostScript jest niezależny od sprzętu, więc jak zadasz wielkość czcionki w punktach, to taka będzie wielkość niezależnie na czym to wydrukujesz.
Z tego co napisałeś (pierwsza linia, druga linia, itd.), to program w PostScripcie będzie prostszy niż w Windowsie :-).
Gdybyś się zdecydował na to rozwiązanie to napisz, powiem Ci więcej jak się za to zabrać.
Możesz jeszcze zapisać te dane, potem localhost, php i biblioteka do tworzenia pdf-a, albo dane zapakować do przeglądarki i wydruk z przeglądarki?