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í esta 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