Skip to Content
avatar image
Former Member

Smartform to PDF

can any1 pls take some trouble to explain me step by step procedure how to convert smartform output to pdf ???

i know there r some function module like convert_otf, but some paramerts have to be passed to it of which i dont have much idea

Add comment
10|10000 characters needed characters exceeded

  • Get RSS Feed

4 Answers

  • Best Answer
    avatar image
    Former Member
    Aug 31, 2007 at 02:09 PM

    Hi

    • Internal Table declarations

    DATA: i_otf TYPE itcoo OCCURS 0 WITH HEADER LINE,

    i_tline TYPE TABLE OF tline WITH HEADER LINE,

    i_receivers TYPE TABLE OF somlreci1 WITH HEADER LINE,

    i_record LIKE solisti1 OCCURS 0 WITH HEADER LINE,

    • Objects to send mail.

    i_objpack LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE,

    i_objtxt LIKE solisti1 OCCURS 0 WITH HEADER LINE,

    i_objbin LIKE solisti1 OCCURS 0 WITH HEADER LINE,

    i_reclist LIKE somlreci1 OCCURS 0 WITH HEADER LINE,

    • Work Area declarations

    wa_objhead TYPE soli_tab,

    w_ctrlop TYPE ssfctrlop,

    w_compop TYPE ssfcompop,

    w_return TYPE ssfcrescl,

    wa_doc_chng typE sodocchgi1,

    w_data TYPE sodocchgi1,

    wa_buffer TYPE string,"To convert from 132 to 255

    • Variables declarations

    v_form_name TYPE rs38l_fnam,

    v_len_in LIKE sood-objlen,

    v_len_out LIKE sood-objlen,

    v_len_outn TYPE i,

    v_lines_txt TYPE i,

    v_lines_bin TYPE i.

    call function 'SSF_FUNCTION_MODULE_NAME'

    exporting

    formname = 'ZZZ_TEST1'

    importing

    fm_name = v_form_name

    exceptions

    no_form = 1

    no_function_module = 2

    others = 3.

    IF sy-subrc <> 0.

    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

    ENDIF.

    w_ctrlop-getotf = 'X'.

    w_ctrlop-no_dialog = 'X'.

    w_compop-tdnoprev = 'X'.

    CALL FUNCTION v_form_name

    EXPORTING

    control_parameters = w_ctrlop

    output_options = w_compop

    user_settings = 'X'

    IMPORTING

    job_output_info = w_return

    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.

    i_otf[] = w_return-otfdata[].

    call function 'CONVERT_OTF'

    EXPORTING

    format = 'PDF'

    max_linewidth = 132

    IMPORTING

    bin_filesize = v_len_in

    TABLES

    otf = i_otf

    lines = i_tline

    EXCEPTIONS

    err_max_linewidth = 1

    err_format = 2

    err_conv_not_possible = 3

    others = 4.

    • Fehlerhandling

    if sy-subrc <> 0.

    endif.

    Message was edited by:

    Durgaprasad Kare

    Add comment
    10|10000 characters needed characters exceeded

  • avatar image
    Former Member
    Aug 31, 2007 at 05:40 PM

    Hi Amit,

    use this code and change according to your requirements i.e, your form name... etc

    This will work definitely.

    &----


    *& Report ZRV_SSF1 *

    *& *

    &----


    *& *

    *& *

    &----


    REPORT zrv_ssf1 .

    TABLES kna1.

    SELECT-OPTIONS: s_kunnr FOR kna1-kunnr.

    DATA: itab2 LIKE kna1 OCCURS 0 WITH HEADER LINE.

    DATA: v_fm TYPE rs38l_fnam.

    DATA: w_ctrlop TYPE ssfctrlop,

    w_compop TYPE ssfcompop,

    w_return TYPE ssfcrescl.

    DATA: i_otf TYPE itcoo OCCURS 0 WITH HEADER LINE,

    v_len_in LIKE sood-objlen,

    i_tline TYPE TABLE OF tline WITH HEADER LINE,

    binfilesize TYPE i.

    START-OF-SELECTION.

    SELECT * FROM kna1

    INTO TABLE itab2

    WHERE kunnr IN s_kunnr.

    IF NOT itab2[] IS INITIAL.

    *finding the SSF function module name

    CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'

    EXPORTING

    formname = 'ZRV_PO'

    IMPORTING

    fm_name = v_fm

    EXCEPTIONS

    no_form = 1

    no_function_module = 2

    OTHERS = 3.

    IF sy-subrc <> 0.

    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

    ENDIF.

    w_ctrlop-getotf = 'X'.

    w_ctrlop-no_dialog = 'X'.

    w_compop-tdnoprev = 'X'.

    *calling the smartform

    CALL FUNCTION v_fm

    EXPORTING

    control_parameters = w_ctrlop

    output_options = w_compop

    user_settings = 'X'

    IMPORTING

    job_output_info = w_return

    TABLES

    itab1 = itab2

    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.

    i_otf[] = w_return-otfdata[].

    CALL FUNCTION 'CONVERT_OTF'

    EXPORTING

    format = 'PDF'

    max_linewidth = 132

    IMPORTING

    bin_filesize = v_len_in

    TABLES

    otf = i_otf

    lines = i_tline

    EXCEPTIONS

    err_max_linewidth = 1

    err_format = 2

    err_conv_not_possible = 3

    OTHERS = 4.

    IF sy-subrc <> 0.

    ENDIF.

    CALL FUNCTION 'GUI_DOWNLOAD'

    EXPORTING

    bin_filesize = binfilesize

    filename = 'E:\ssf.pdf'

    filetype = 'BIN'

    TABLES

    data_tab = i_tline.

    ENDIF.

    regards,

    Ravi.

    Add comment
    10|10000 characters needed characters exceeded

  • avatar image
    Former Member
    Sep 03, 2007 at 07:23 AM

    Hi Amit,

    Procedure to convert a smartform to pdf::

    Step1: create the following

    1. a work area of type ssfctrlop,

    a work area of type ssfcompop,

    a work area of type ssfcrescl,

    an internal table of type itcoo (used for otf data)

    an internal table of type tline (used for pdf data)

    step 2 :

    Generally the data gets converted to otf by the composer,

    but this data format is not visible , hence in order to access

    the data in the otf format, we need to set the following

    components.

     data: w_ctrlop type ssfctrlop.
        w_ctrlop-getotf = 'X'.      

    step 3 :

    data: w_return type ssfcrescl.

    call the generated function module & pass the structure

    w_ctrlop in the control_parameter option, this function module

    also returns a parameter called job_output_info, take it into

    structure of type ssfcrescl.

    step 4. The internal table of type itcoo has now the data in otf format

    via the following assignment.

      i_otf[] = w_return-otfdata[].

    step 5. finally call the function module convert_otf to convert the data from

    otf format to the pdf format , collect the data in an internal table

    of structure type TLINE.

    Add comment
    10|10000 characters needed characters exceeded

  • avatar image
    Former Member
    Aug 31, 2007 at 02:21 PM

    data:

    fm_name TYPE RS38L_FNAM, "Smart Forms: FM Name

    sf_name TYPE TDSFNAME

    value 'YOUR_FORM_NAME', "Smart Forms: Form Name

    P_OUTPUT_OPTIONS TYPE SSFCOMPOP,

    P_JOB_OUTPUT_INFO TYPE SSFCRESCL,

    P_CONTROL_PARAMETERS TYPE SSFCTRLOP,

    P_LANGUAGE TYPE SFLANGU value 'E',

    P_E_DEVTYPE TYPE RSPOPTYPE.

    data:

    P_BIN_FILESIZE TYPE I,

    P_BIN_FILE TYPE XSTRING,

    P_OTF type table of ITCOO,

    P_DOCS type table of DOCS,

    P_LINES type table of TLINE,

    name type string,

    path type string,

    fullpath type string,

    filter type string,

    guiobj type ref to cl_gui_frontend_services,

    uact type i,

    filename(128).

    *"----


    GET SMARTFORM FUNCTION MODULE NAME ---

    CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'

    EXPORTING

    FORMNAME = sf_name

    IMPORTING

    FM_NAME = fm_name

    EXCEPTIONS

    NO_FORM = 1

    NO_FUNCTION_MODULE = 2

    • OTHERS = 3

    .

    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 'SSF_GET_DEVICE_TYPE'

    EXPORTING

    I_LANGUAGE = P_LANGUAGE

    I_APPLICATION = 'SAPDEFAULT'

    IMPORTING

    E_DEVTYPE = P_E_DEVTYPE.

    P_OUTPUT_OPTIONS-XSFCMODE = 'X'.

    P_OUTPUT_OPTIONS-XSF = SPACE.

    P_OUTPUT_OPTIONS-XDFCMODE = 'X'.

    P_OUTPUT_OPTIONS-XDF = SPACE.

    P_OUTPUT_OPTIONS-TDPRINTER = P_E_DEVTYPE.

    P_CONTROL_PARAMETERS-NO_DIALOG = 'X'.

    P_CONTROL_PARAMETERS-GETOTF = 'X'.

    *

    ****...................................PRINTING.........................

    CALL FUNCTION fm_name

    EXPORTING

    CONTROL_PARAMETERS = P_CONTROL_PARAMETERS

    OUTPUT_OPTIONS = P_OUTPUT_OPTIONS

    • (....) <--- your form import parameters

    IMPORTING

    JOB_OUTPUT_INFO = P_JOB_OUTPUT_INFO.

    IF SY-SUBRC <> 0.

    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

    ENDIF.

    P_OTF[] = P_JOB_OUTPUT_INFO-OTFDATA.

    ****...................................CONVERT TO PDF...............

    CALL FUNCTION 'CONVERT_OTF_2_PDF'

    IMPORTING

    BIN_FILESIZE = P_BIN_FILESIZE

    TABLES

    OTF = P_OTF

    DOCTAB_ARCHIVE = P_DOCS

    LINES = P_LINES

    EXCEPTIONS

    ERR_CONV_NOT_POSSIBLE = 1

    ERR_OTF_MC_NOENDMARKER = 2

    OTHERS = 3.

    IF SY-SUBRC <> 0.

    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

    ENDIF.

    concatenate 'xxxx' '.pdf' into name.

    ****..................................REQUEST FILE NAME.................

    create object guiobj.

    call method guiobj->file_save_dialog

    EXPORTING

    default_extension = 'pdf'

    default_file_name = name

    file_filter = filter

    CHANGING

    filename = name

    path = path

    fullpath = fullpath

    user_action = uact.

    if uact = guiobj->action_cancel.

    exit.

    endif.

    move fullpath to filename.

    ****..................................DOWNLOAD AS FILE................

    CALL FUNCTION 'WS_DOWNLOAD'

    EXPORTING

    BIN_FILESIZE = P_BIN_FILESIZE

    FILENAME = filename

    FILETYPE = 'BIN'

    TABLES

    DATA_TAB = P_LINES

    EXCEPTIONS

    FILE_OPEN_ERROR = 1

    FILE_WRITE_ERROR = 2

    INVALID_FILESIZE = 3

    INVALID_TYPE = 4

    NO_BATCH = 5

    UNKNOWN_ERROR = 6

    INVALID_TABLE_WIDTH = 7

    GUI_REFUSE_FILETRANSFER = 8

    CUSTOMER_ERROR = 9

    NO_AUTHORITY = 10

    OTHERS = 11.

    .

    IF SY-SUBRC <> 0.

    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

    ENDIF.

    regards,

    srinivas

    Add comment
    10|10000 characters needed characters exceeded