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.