Send PDF file to FTP server

REPORT  zpdfsendtoftp.
DATA : BEGIN OF t_vbak OCCURS 0,
         vbeln TYPE vbrk-vbeln,
         vkorg TYPE vbak-vkorg,
         vkbur TYPE vbak-vkbur,
       END OF t_vbak.
DATA: function_name TYPE rs38l_fnam,
      form_name  TYPE tdsfname VALUE 'ZTEST1'.
DATA: carr_id TYPE sbook-carrid,
      ctrlop  TYPE ssfctrlop,
      compop   TYPE ssfcompop,
      tab_otf_data  TYPE ssfcrescl.
DATA: pdf_tab       LIKE tline OCCURS 0 WITH HEADER LINE,
      tab_otf_final TYPE itcoo OCCURS 0 WITH HEADER LINE,
      bin_filesize  TYPE i,
      pdf_xstring TYPE xstring,
      file_name     TYPE string,
      file_path     TYPE string,
      full_path     TYPE string.

PARAMETERS : vbeln TYPE vbak-vbeln.   " input parameter
SELECT vbeln vkorg vkbur FROM vbak INTO TABLE t_vbak WHERE vbeln = vbeln.
compop-tddest = 'LP01'.
ctrlop-no_dialog = 'X'.
ctrlop-preview = space.
ctrlop-getotf = 'X'.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
  EXPORTING
    formname           = form_name
  IMPORTING
    fm_name            = function_name
  EXCEPTIONS
    no_form            = 1
    no_function_module = 2
    OTHERS             = 3.
CALL FUNCTION function_name
  EXPORTING
    control_parameters = ctrlop
    output_options     = compop
    user_settings      = space
    vbeln              = vbeln
  IMPORTING
    job_output_info    = tab_otf_data
  TABLES
    t_vbak             = t_vbak.
" Convert data to PDF "
tab_otf_final[] = tab_otf_data-otfdata[].
CALL FUNCTION 'CONVERT_OTF'
  EXPORTING
    format                = 'PDF'
    max_linewidth         = 132
  IMPORTING
    bin_filesize          = bin_filesize
    bin_file              = pdf_xstring
  TABLES
    otf                   = tab_otf_final
    lines                 = pdf_tab
  EXCEPTIONS
    err_max_linewidth     = 1
    err_format            = 2
    err_conv_not_possible = 3
    err_bad_otf           = 4
    OTHERS                = 5.
IF sy-subrc <> 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
" send pdf file to server "
DATA: handle   TYPE i,
      key      TYPE i VALUE 26101957,
      pwd_len  TYPE i,
      command_index TYPE i.
DATA: user(30) TYPE c VALUE 'ftptest123', "user name of ftp server"
      pwd(30)  TYPE c VALUE 'pass123',    "password of ftp server"
      host(64) TYPE c VALUE 'enter host', "ip address of FTP server"
      dest     LIKE rfcdes-rfcdest VALUE 'SAPFTPA'. "Background RFC destination"
DATA filename TYPE char200.
DATA bindata  TYPE TABLE OF blob WITH HEADER LINE.
DATA result   TYPE TABLE OF text WITH HEADER LINE.
DATA commands TYPE TABLE OF text WITH HEADER LINE.

DATA i_tab_converted_data TYPE STANDARD TABLE OF char200 WITH HEADER LINE.
TYPES:BEGIN OF str_xml,
  data(256) TYPE x,
END OF str_xml.
DATA: xml_table TYPE TABLE OF str_xml,
      xml_line  TYPE str_xml, "Adjust as per requirement/OS limits"
      filepath(128) TYPE c,
      command(200) TYPE c.

filepath = '/home'.
OPEN DATASET filepath FOR OUTPUT IN BINARY MODE.
IF sy-subrc = 0.
  LOOP AT xml_table INTO xml_line.
    TRANSFER xml_line TO filepath.
  ENDLOOP.
ENDIF.
CLOSE DATASET filepath.
" Scramble the password provided in a format recognized by SAP."
SET EXTENDED CHECK OFF.
pwd_len = strlen( pwd ).
CALL FUNCTION 'HTTP_SCRAMBLE'
  EXPORTING
    source      = pwd
    sourcelen   = pwd_len
    key         = key
  IMPORTING
    destination = pwd.
IF sy-subrc <> 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
" To Connect to the Server using FTP "
CALL FUNCTION 'FTP_CONNECT'
  EXPORTING
    user            = user
    password        = pwd
    host            = host
    rfc_destination = dest
  IMPORTING
    handle          = handle
  EXCEPTIONS
    OTHERS          = 1.
IF sy-subrc <> 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
" Upload File "
CONCATENATE '/' 'test' '.pdf' INTO filename.
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
  EXPORTING
    buffer     = pdf_xstring
  TABLES
    binary_tab = bindata.
CALL FUNCTION 'FTP_COMMAND'
  EXPORTING
    handle        = handle
    command       = 'set passive on'
  TABLES
    data          = result
  EXCEPTIONS
    command_error = 1
    tcpip_error   = 2.
CALL FUNCTION 'FTP_R3_TO_SERVER'
  EXPORTING
    handle        = handle
    fname         = filename
    blob_length   = bin_filesize
  TABLES
    blob          = pdf_tab
  EXCEPTIONS
    tcpip_error   = 1
    command_error = 2
    data_error    = 3
    OTHERS        = 4.
* To disconnect the FTP
CALL FUNCTION 'FTP_DISCONNECT'
  EXPORTING
    handle = handle
  EXCEPTIONS
    OTHERS = 1.
* Disconnect the RFC connection between SAP and other system.
CALL FUNCTION 'RFC_CONNECTION_CLOSE'
  EXPORTING
    destination = dest
  EXCEPTIONS
    OTHERS      = 1.
WRITE: 'pdf file send successfully'.