Buen día, Saúl.
Usa foxypreviewer, el cual te da las opciones para guardarlo como pdf o imagen, por lo que te paso un código que use alguna vez. Es para que te des una idea y lo mando llamar desde mi programa principal para que en cualquier reporte que generes puedas aprovechar las bondades de ésta gran utilidad. Obviamente, puede mejorarse en mucho lo que pongo a continuación.
IF FILE(ADDBS(gcRutaLocal)+'FoxyPreviewer.app')
DO (ADDBS(gcRutaLocal)+'FoxyPreviewer.app')
*!* _Screen.oFoxyPreviewer.cTitle = "Menú Personalizado para el Usuario"
_Screen.oFoxyPreviewer.cLanguage = "SPANISH"
_Screen.oFoxyPreviewer.nZoomLevel = 10 && initial zoom level of the preview window. Possible values are:
_Screen.oFoxyPreviewer.oSettingsDlg.lenablechkemail = .f.
_Screen.oFoxyPreviewer.oSettingsDlg.lenabletabemail = .f.
_Screen.oFoxyPreviewer.nWindowState = 2 && 0 ó 2.
_Screen.oFoxyPreviewer.nDockType = 0 && 0-4.
_Screen.oFoxyPreviewer.nButtonSize = 1 && 1=16x16 ó 2=32x32
_Screen.oFoxyPreviewer.lSendToEmail = .f.
_Screen.oFoxyPreviewer.lEmailAuto = .f.
*!* Guardar como
_Screen.oFoxyPreviewer.lSaveAsHTML = .f.
_Screen.oFoxyPreviewer.lSaveAsMHT = .f.
_Screen.oFoxyPreviewer.lSaveAsTXT = .f.
_Screen.oFoxyPreviewer.lSaveAsXLS = .f.
_Screen.oFoxyPreviewer.cOutputPath = gcRutaServidor+'Pdf\'
WITH _Screen.oFoxyPreviewer.oSettingsDlg
.lEnableTabPdf = .T.
.lEnableLanguage = .F.
.lEnableChkSaveasTxt = .F.
.lEnableChkSaveasHtml = .F.
.lenablechkcopies = .f.
.lenablechkprinters = .t.
.lenablechksaveashtml = .f.
.lenablechksaveasmht = .f.
.lenablechksaveastxt = .f.
.lenablechksaveasxls = .f.
.lshowtabgeneral = .f.
.lenablelanguage = .f.
.lenablechksettings = .t.
.lenabletabcontrols = .t.
.lenabletabemail = .f.
.lenabletaboutput = .f.
.lenabletabpdf = .f.
.lenabletabxls = .f.
.lshowlanguage = .f.
.lenabletabxls = .f.
ENDWITH
ENDIF
Saludos desde México, D.F.