Anteriormente, publique como un usuario puede convertir un smartforms a pdf, pero ahora he subido un ejemplo de como generar directamente el pdf sin mostrar la pantalla de impresión utilizando un smartforms.
Solo necesitamos agregar un poco de código y ahora en lugar de mostrar la pantalla de impresión, nos muestra una pantalla para elegir la ruta en donde se guardará el formulario en formato PDF, aquí está el código:
REPORT zsmartforms_pdf.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(20) tit_file.
SELECTION-SCREEN POSITION 21.
PARAMETERS p_form TYPE tdsfname DEFAULT 'ZPRUEBA'.
SELECTION-SCREEN END OF LINE.
DATA: it_otf TYPE STANDARD TABLE OF itcoo,
it_docs TYPE STANDARD TABLE OF docs,
it_lines TYPE STANDARD TABLE OF tline,
st_job_output_info TYPE ssfcrescl,
st_document_output_info TYPE ssfcrespd,
st_job_output_options TYPE ssfcresop,
st_output_options TYPE ssfcompop,
st_control_parameters TYPE ssfctrlop,
obj_len TYPE so_obj_len,
idioma TYPE sflangu VALUE 'S',
devtype TYPE rspoptype,
bin_filesize TYPE i,
nombre_archivo TYPE string,
ruta TYPE string,
ruta_completa TYPE string,
filtro TYPE string,
uact TYPE i,
guiobj TYPE REF TO cl_gui_frontend_services,
filename TYPE string,
nombre_formulario TYPE rs38l_fnam.
INITIALIZATION.
tit_file = 'Nombre Smartforms'.
START-OF-SELECTION.
CALL FUNCTION 'SSF_GET_DEVICE_TYPE'
EXPORTING
i_language = idioma
i_application = 'SAPDEFAULT'
IMPORTING
e_devtype = devtype.
st_output_options-tdprinter = devtype.
st_control_parameters-no_dialog = 'X'. "Ocultar dialogo
st_control_parameters-getotf = 'X'.
"Obtener el nombre del formulario
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = p_form
IMPORTING
fm_name = nombre_formulario
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
"Llamar al formulario
" ************************************************************
" No olvidar agregar los parametros que use tu formulario
" ************************************************************
CALL FUNCTION nombre_formulario
EXPORTING
control_parameters = st_control_parameters
output_options = st_output_options
IMPORTING
document_output_info = st_document_output_info
job_output_info = st_job_output_info
job_output_options = st_job_output_options
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
"Convertir a PDF
CALL FUNCTION 'CONVERT_OTF_2_PDF'
IMPORTING
bin_filesize = bin_filesize
TABLES
otf = st_job_output_info-otfdata
doctab_archive = it_docs
lines = it_lines
EXCEPTIONS
err_conv_not_possible = 1
err_otf_mc_noendmarker = 2
OTHERS = 3.
"Conseguir el nombre del archivo pdf
CONCATENATE p_form '.pdf' INTO nombre_archivo.
CREATE OBJECT guiobj.
CALL METHOD guiobj->file_save_dialog
EXPORTING
default_extension = 'pdf'
default_file_name = nombre_archivo
file_filter = filtro
CHANGING
filename = nombre_archivo
path = ruta
fullpath = ruta_completa
user_action = uact.
IF uact = guiobj->action_cancel.
EXIT.
ENDIF.
"Descargar a la computadora
MOVE ruta_completa TO filename.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
bin_filesize = bin_filesize
filename = filename
filetype = 'BIN'
TABLES
data_tab = it_lines
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 22.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
Ejemplo para descargar smartforms a pdf