Try this
; https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/lisp-move-center-text-to-selected-line-polyline-segment-and-then/td-p/13328372
(defun c:txt2line ( / mp ang txt ins mp)
(defun getplineseg ( / elst ename pt param preparam postparam pt1 pt2)
(setq elst (entsel "\nSelect pline segment: "))
(setq ename (car elst))
(setq pt (cadr elst))
(setq pt (vlax-curve-getClosestPointTo ename pt))
(setq param (vlax-curve-getParamAtPoint ename pt))
(setq preparam (fix param))
(setq postparam (1+ preparam))
(setq pt1 (vlax-curve-getPointAtParam ename preparam)
pt2 (vlax-curve-getPointAtParam ename postparam))
(setq mp (setq mp (mapcar '* (mapcar '+ pt1 pt2) '(0.5 0.5))))
(setq ang (angle pt1 pt2))
)
(setq oldsnap (getvar 'osmode))
(setvar 'osmode 0)
(setq dist 0.1)
(getplineseg)
(setq txt (car (entsel "\nPick text ")))
(setq ins (cdr (assoc 10 (entget txt))))
(setq mp (polar mp (- ang (/ pi 2)) dist))
(command "move" txt "" ins mp)
(princ)
)