Thursday, February 4, 2010

SMARTFORM: Convert Smartform to PDF format


Source: SAP Community
Summary: Converting the smartform to PDF is process of 3 simple steps.
  • Calling the Smart form, then it returns the OTF data in Return.
  • Converting the OTF data into required format using the Function Module CONVERT_OTF_2_PDF.
  • Download the File 

    *&---------------------------------------------------------------------*
    *& Report  ZTEST_NREDDY_PDF
    *&
    *&---------------------------------------------------------------------*
    *&
    *&
    *&---------------------------------------------------------------------*
    REPORT  ZTEST_NREDDY_PDF.
    * Internal table declaration
    DATA: it_otf      TYPE STANDARD TABLE OF itcoo,
          it_docs     TYPE STANDARD TABLE OF docs,
          it_lines    TYPE STANDARD TABLE OF tline.
    * Declaration of local variables.
    DATA:
          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,
          v_len_in                 TYPE so_obj_len,
          v_language               TYPE sflangu VALUE 'E',
          v_e_devtype              TYPE rspoptype,
          v_bin_filesize           TYPE i,
          v_name                   TYPE string,
          v_path                   TYPE string,
          v_fullpath               TYPE string,
          v_filter                 TYPE string,
          v_uact                   TYPE i,
          v_guiobj                 TYPE REF TO cl_gui_frontend_services,
          v_filename               TYPE string,
          v_fm_name                TYPE rs38l_fnam.
    CONSTANTS c_formname           TYPE tdsfname VALUE 'ZTEST'.
    CALL FUNCTION 'SSF_GET_DEVICE_TYPE'
      EXPORTING
        i_language          = v_language
        i_application       = 'SAPDEFAULT'
      IMPORTING
        e_devtype           = v_e_devtype.
    st_output_options-tdprinter = v_e_devtype.
    st_control_parameters-no_dialog = 'X'.
    st_control_parameters-getotf = 'X'.
    *.................GET SMARTFORM FUNCTION MODULE NAME.................*
    CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
      EXPORTING
        formname = c_formname
      IMPORTING
        fm_name  = v_fm_name
      EXCEPTIONS
        no_form  = 1
       no_function_module = 2   
        OTHERS   = 3.
    *...........................CALL SMARTFORM............................*
    CALL FUNCTION v_fm_name
      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.
    *.........................CONVERT TO OTF TO PDF.......................*
      CALL FUNCTION 'CONVERT_OTF_2_PDF'
        IMPORTING
          bin_filesize   = v_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.
     *........................GET THE FILE NAME TO STORE....................*
      CONCATENATE 'smrt' '.pdf' INTO v_name.
      CREATE OBJECT v_guiobj.
      CALL METHOD v_guiobj->file_save_dialog
        EXPORTING
          default_extension  = 'pdf'
          default_file_name  = v_name
          file_filter        = v_filter
        CHANGING
          filename           = v_name
          path               = v_path
          fullpath           = v_fullpath
          user_action        = v_uact.
      IF v_uact = v_guiobj->action_cancel.
        EXIT.
      ENDIF.
    *..................................DOWNLOAD AS FILE....................*
    
      MOVE v_fullpath TO v_filename.
      CALL FUNCTION 'GUI_DOWNLOAD'
        EXPORTING
          bin_filesize     = v_bin_filesize
          filename         = v_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.
    *------------------------------------------------------------------------
    Or other option
    How to convert smartform output into pdf?
    There is a way to download smartform in PDF format.
    Please do the following:  
    1. Print the smartform to the spool.  
    2. Note the spool number.  
    3. Download a PDF file (Acrobat Reader) version of the spool by running Program RSTXPDFT4 and entering the  
    noted spool number.
    or use this program:
    
    &---------------------------------------------------------------------
    *& Report ZPDF_DNLD_TEST2 *
    *& *
    &---------------------------------------------------------------------
    *& DEVK904540 *
    *& *
    &---------------------------------------------------------------------
    
    REPORT ZPDF_DNLD_TEST2 .
    
    data: i_otf LIKE itcoo OCCURS 100 WITH HEADER LINE,
    i_pdf LIKE tline OCCURS 100 WITH HEADER LINE.
    
    data: op_option type SSFCTRLOP,
    job_output type SSFCRESCL.
    
    op_option-getotf = 'X'.
    
    CALL FUNCTION '/1BCDWB/SF00000005'
    EXPORTING
    
    ARCHIVE_INDEX = 
    ARCHIVE_INDEX_TAB = 
    ARCHIVE_PARAMETERS = 
    CONTROL_PARAMETERS = op_option
    
    MAIL_APPL_OBJ = 
    MAIL_RECIPIENT = 
    MAIL_SENDER = 
    OUTPUT_OPTIONS = 
    USER_SETTINGS = 'X' 
    itab1 = itab1 
    IMPORTING
    
    DOCUMENT_OUTPUT_INFO = 
    JOB_OUTPUT_INFO = job_output
    
    JOB_OUTPUT_OPTIONS = 
    EXCEPTIONS
    FORMATTING_ERROR = 1
    INTERNAL_ERROR = 2
    SEND_ERROR = 3
    USER_CANCELED = 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.
    
    CALL FUNCTION 'CONVERT_OTF'
    EXPORTING
    FORMAT = 'PDF'
    
    MAX_LINEWIDTH = 132 
    ARCHIVE_INDEX = ' ' 
    COPYNUMBER = 0 
    ASCII_BIDI_VIS2LOG = ' ' 
    PDF_DELETE_OTFTAB = ' ' 
    IMPORTING 
    BIN_FILESIZE = 
    BIN_FILE = 
    TABLES
    otf = job_output-otfdata
    lines = i_pdf
    
    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.
    
    CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
    
    BIN_FILESIZE = 
    filename = 'c:\test_pdf_sf.pdf'
    FILETYPE = 'BIN'
    
    tables
    data_tab = i_pdf
    
    FIELDNAMES = 
    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.

No comments:

Post a Comment