I've found something from several year ago that would do the trick more or less.
Just add (FixPlotDevice [YourDefaultPrinter] nil) as your first line of code. It will change the current printer on the active layout only if the current one is invalid. If you want to force a new printer for all layouts just change the nil into T.
(defun FixPlotDevice (FPD_PlotDeviceName FPD_Force / FPD_ActiveDocument FPD_ActiveLayout FPD_ActivePlotDevice FPD_Layouts FPD_PlotDeviceList)
(setq FPD_ActiveDocument (vla-get-Activedocument (vlax-get-acad-object)))
(setq FPD_ActiveLayout (vla-get-ActiveLayout FPD_ActiveDocument))
(setq FPD_PlotDeviceList (vlax-safearray->list (vlax-variant-value (vla-GetPlotDeviceNames FPD_ActiveLayout))))
(if
(or
(member FPD_PlotDeviceName FPD_PlotDeviceList)
(and
(= (strcase FPD_PlotDeviceName) "DEFAULT")
(member "Default Windows System Printer.pc3" FPD_PlotDeviceList)
)
)
(progn
(if
(= (strcase FPD_PlotDeviceName) "DEFAULT")
(setq FPD_PlotDeviceName "Default Windows System Printer.pc3")
)
(setq FPD_Layouts (vla-get-Layouts FPD_ActiveDocument))
(vlax-for FPD_Layout FPD_Layouts
(setq FPD_ActivePlotDevice (vla-get-ConfigName FPD_Layout))
(if
(or
(not (member FPD_ActivePlotDevice FPD_PlotDeviceList))
FPD_Force
)
(vla-put-ConfigName FPD_Layout FPD_PlotDeviceName)
)
)
(vlax-release-object FPD_Layouts)
)
)
(vlax-release-object FPD_ActiveDocument)
(vlax-release-object FPD_ActiveLayout)
)