Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Smartform to PDF

Former Member
0 Kudos
435

Hi

Can u plz send the aspproach and code for converting smartform to PDF document

Thanks

8 REPLIES 8
Read only

Former Member
0 Kudos
305

HI,

see this example


PARAMETERS:lifnr like lfa1-lifnr.

DATA:number(3) TYPE n value 90.
DATA:ktab TYPE TABLE OF lfa1.
DATA:ltab TYPE TABLE OF ekko.

DATA:w_fmodule TYPE rs38l_fnam,
     w_cparam TYPE ssfctrlop,
     w_outoptions TYPE ssfcompop,
     w_bin_filesize TYPE i,
     w_file_name type string,
     w_file_path type string,
     w_full_path type string.

* Internal table to hold the OTF data
DATA:t_otf TYPE itcoo OCCURS 0 WITH HEADER LINE,
* Internal table to hold OTF data recd from the SMARTFORM
     t_otf_from_fm TYPE ssfcrescl,
* Internal table to hold the data from the FM CONVERT_OTF
     t_pdf_tab LIKE tline OCCURS 0 WITH HEADER LINE.

SELECT * from lfa1 into TABLE ktab where lifnr = lifnr.

IF sy-subrc = 0.
  SELECT * from ekko into TABLE ltab FOR ALL ENTRIES IN ktab WHERE
lifnr = ktab-lifnr.
ENDIF.

w_cparam-no_dialog = 'X'.
w_cparam-preview = space. " Suppressing the dialog box
                                                    " for print preview
w_cparam-getotf = 'X'.

* Printer name to be used is provided in the export parameter
* OUTPUT_OPTIONS
w_outoptions-tddest = 'LP01'.

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
  EXPORTING
    FORMNAME                 = 'ZBHSFORM'
 IMPORTING
   FM_NAME                  = w_fmodule.

CALL FUNCTION w_fmodule
  EXPORTING
*   ARCHIVE_INDEX              =
*   ARCHIVE_INDEX_TAB          =
*   ARCHIVE_PARAMETERS         =
   CONTROL_PARAMETERS         = w_cparam
*   MAIL_APPL_OBJ              =
*   MAIL_RECIPIENT             =
*   MAIL_SENDER                =
   OUTPUT_OPTIONS             = w_outoptions
*   USER_SETTINGS              = 'X'
 IMPORTING
*   DOCUMENT_OUTPUT_INFO       =
   JOB_OUTPUT_INFO            = t_otf_from_fm
*   JOB_OUTPUT_OPTIONS         =
  TABLES
    ITAB                       = ktab
    JTAB                       = ltab
* 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.

START-OF-SELECTION.
t_otf[] = t_otf_from_fm-otfdata[].

* Function Module CONVERT_OTF is used to convert the OTF format to PDF
CALL FUNCTION 'CONVERT_OTF'
  EXPORTING
    FORMAT = 'PDF'
    MAX_LINEWIDTH = 132
  IMPORTING
    BIN_FILESIZE = w_bin_filesize
  TABLES
    otf = t_otf
    lines = t_pdf_tab.

* To display File SAVE dialog window
CALL METHOD cl_gui_frontend_services=>file_save_dialog
  CHANGING
    filename = w_file_name
    path = w_file_path
    fullpath = w_full_path.


* Use the FM GUI_DOWNLOAD to download the generated PDF file onto the
* presentation server
CALL FUNCTION 'GUI_DOWNLOAD'
  EXPORTING
    BIN_FILESIZE = w_bin_filesize
    filename = w_full_path
    FILETYPE = 'BIN'
  tables
    data_tab = t_pdf_tab.

rgds,

bharat.

Read only

Former Member
0 Kudos
305

hiii

*&---------------------------------------------------------------------*
*&      Form  convert_otf_2_pdf
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM convert_otf_2_pdf .

  DATA: "t_line            LIKE tline OCCURS 0 WITH HEADER LINE,
        t_objcont         LIKE soli  OCCURS 0 WITH HEADER LINE,
        d_doc_size(12)    TYPE c,
        d_fle1(2)         TYPE p,
        d_fle2(2)         TYPE p,
        d_off1            TYPE p,
        d_hltlines        TYPE i,
        d_hfeld(500)      TYPE c,
        w_indx            LIKE sy-tabix.

  CLEAR: t_line, t_objcont, d_off1.
  REFRESH: t_line, t_objcont.

* Check/set DEFAULT Desired-type attachment...
  IF d_desired_type IS INITIAL.        " Entered Desired type?
    d_desired_type = 'PDF'.            " NO  - default to PDF
  ENDIF.                               "

  CALL FUNCTION 'CONVERT_OTF'
    EXPORTING
      format                = d_desired_type
    IMPORTING
      bin_filesize          = d_doc_size
    TABLES
      otf                   = t_itcoo
      lines                 = t_line
    EXCEPTIONS
      err_max_linewidth     = 1
      err_format            = 2
      err_conv_not_possible = 3
      OTHERS                = 4.

  IF sy-subrc > 0.
    RAISE otf_convert_failed.
  ENDIF.

*&---------------------------------------------------------------------*
*&      Form  convert_otf_2_pdf_sx
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM convert_otf_2_pdf_sx .
  DATA:
    t_otf          LIKE solisti1 OCCURS 0 WITH HEADER LINE,"ENABLE
    t_pdf          LIKE tline    OCCURS 0 WITH HEADER LINE,"ENABLE
    doc_size(12)   TYPE n,
    len_out        TYPE i,
    x_real         LIKE  soodk-objtp,
    x_idx_b        LIKE sy-tabix,
    x_idx_e        LIKE sy-tabix.

  IF d_desired_type = 'PDF'.
    d_desired_type = 'OTF'.
  ENDIF.

  CALL FUNCTION 'RSPO_RETURN_SPOOLJOB'
    EXPORTING
      rqident              = d_spool_id
      desired_type         = d_desired_type
    IMPORTING
      real_type            = x_real
    TABLES
      buffer               = t_otf
      buffer_pdf           = t_pdf
    EXCEPTIONS
      no_such_job          = 1
      job_contains_no_data = 2
      selection_empty      = 3
      no_permission        = 4
      can_not_access       = 5
      read_error           = 6
      type_no_match        = 7
      OTHERS               = 8.
  IF sy-subrc <> 0.
    IF sy-subrc = 1.
      RAISE invalid_spool_id.
    ELSE.
      RAISE otf_convert_failed.
    ENDIF.
  ENDIF.

*&---------------------------------------------------------------------*
*&      Form  CONVERSION_OF_SIZE                                       *
*&---------------------------------------------------------------------*
* *"Converting the file to get a 255 char single line internal table   *
* The PDF file that is generated out of the above function module     *
* cannot be transported as it needs to be of 255 chars. Hence         *
* converting the file to get a 255 char single line,internal table.   *
*----------------------------------------------------------------------*

FORM conversion_of_size .
"Declaring Local Constants............................................
  CONSTANTS:
     cnv_hexconst_zero TYPE x VALUE '00'.

*"--------------------------------------------------------------------*
* Internal table to hold 255 Char's Single Line.                      *
*"--------------------------------------------------------------------*
  DATA:
    lv_big_lines(268) TYPE c
                      OCCURS 0 WITH HEADER LINE.




*"Local Work Variables.................................................
  DATA:
    lfl_flag          TYPE c,
    lv_left_t(268)    TYPE c,
    lv_left_i         TYPE i,
    tv_left_i         TYPE i,
    lv_curr_i         TYPE i.

  FIELD-SYMBOLS: <f>.

* Get the lines into a table of 268 char as the first step to put it in
* the pdf file of 255 chars
  CLEAR lfl_flag.

  LOOP AT t_line.

    IF lfl_flag EQ ' '.
      CLEAR lv_big_lines.
      ASSIGN lv_big_lines(134) TO <f>.
      <f> = t_line.
      lfl_flag = 'X'.
    ELSE.
      lv_big_lines+134 = t_line.
      APPEND lv_big_lines.
      CLEAR: lfl_flag.
    ENDIF.                             " If lfl_flag = ''..

  ENDLOOP.                             " Loop at t_pdf

  IF lfl_flag EQ 'X'.
    APPEND lv_big_lines.
  ENDIF.                               " If lflf_flag eq 'X'..

* Next fill it into a 255 char table
  CLEAR: lv_left_t, lv_left_i, tv_left_i.
  lv_curr_i = 255.

  LOOP AT lv_big_lines.
    IF lv_left_i NE 0.

      IF lv_curr_i NE 0.
        wa_objcont(lv_left_i)           = lv_left_t(lv_left_i).
        wa_objcont+lv_left_i(lv_curr_i) = lv_big_lines(lv_curr_i).
      ELSE.
        wa_objcont = lv_left_t(lv_left_i).
      ENDIF.                           " IF lv_curr_i NE 0

    ELSE.

      wa_objcont = lv_big_lines(lv_curr_i).

    ENDIF.                             " IF lv_left_i NE 0

    APPEND wa_objcont TO t_objcont.
    tv_left_i = 268 - lv_curr_i.

    IF tv_left_i > 255.
      wa_objcont = lv_big_lines+lv_curr_i(255).
      APPEND wa_objcont TO t_objcont.
      lv_left_i = tv_left_i - 255.
      tv_left_i = 255 + lv_curr_i.
      lv_curr_i = 255 - lv_left_i.
      lv_left_t = lv_big_lines+tv_left_i.
    ELSE.
      lv_left_t = lv_big_lines+lv_curr_i.
      lv_left_i = 268 - lv_curr_i.
      lv_curr_i = 255 - lv_left_i.
    ENDIF.                             " IF tv_left_i > 255

  ENDLOOP.                             " LOOP AT lv_big_lines.

  CLEAR wa_objcont .

  ASSIGN wa_objcont(lv_left_i) TO <f>.

  <f> = lv_left_t(lv_left_i).

  APPEND wa_objcont TO t_objcont.

    h_transf_type = 'X'.                 " Transfer type BINARY...
  IF NOT t_objcont[] IS INITIAL.
    t_soli[]     = t_objcont[].        " SapScript doc to Objects...
  ENDIF.


ENDFORM.                    " CONVERSION_OF_SIZE

this is how conversion can be done.

reward if useful

thx

twinkal

Read only

Former Member
0 Kudos
305

&----


*& Report YMY_ESS_SCORECARD

*&

&----


*&

*&

&----


REPORT YMY_ESS_SCORECARD.

data : pdf_fsize TYPE i,

otf1 LIKE itcoo OCCURS 0 WITH HEADER LINE,

lines1 LIKE tline OCCURS 0 WITH HEADER LINE.

DATA : p_9401 TYPE STANDARD TABLE OF pa9401 WITH HEADER LINE.

DATA: BEGIN OF pdf_line_tab OCCURS 0,

line(134) TYPE c,

END OF pdf_line_tab,

  • data: pdf_line_tab TYPE STANDARD TABLE OF tline,

url(255),

ln TYPE i,

col TYPE i,

line TYPE i.

DATA: BEGIN OF html_tab OCCURS 0.

INCLUDE STRUCTURE w3html.

DATA: END OF html_tab.

data : wt_01 type string,

wt_02 type string,

wt_03 type string.

DATA: fm_name TYPE rs38l_fnam.

data : st_job_output_info TYPE ssfcrescl,

st_document_output_info TYPE ssfcrespd,

it_docs TYPE STANDARD TABLE OF docs,

it_lines TYPE STANDARD TABLE OF tline,

st_output_options TYPE ssfcompop,

st_control_parameters TYPE ssfctrlop,

st_job_output_options TYPE ssfcresop.

DATA : stext1 TYPE hrp1000-stext,

stext2 TYPE hrp1000-stext,

basic1 TYPE pa0008-bet01,

ename TYPE pa0001-ename,

basic type i,

local type rp50m-subty.

DATA : ssfcompop TYPE ssfcompop.

data: SSFCTRLOP type SSFCTRLOP.

DATA: V_BIN_FILESIZE TYPE I,

T_OTF TYPE ITCOO OCCURS 0 WITH HEADER LINE,

T_PDF_TAB TYPE TLINE OCCURS 0 WITH HEADER LINE,

v_guiobj TYPE REF TO cl_gui_frontend_services,

v_filename TYPE string,

v_name TYPE string,

v_path TYPE string,

v_fullpath TYPE string,

v_filter TYPE string,

v_uact TYPE i,

v_language TYPE sflangu VALUE 'E',

v_e_devtype TYPE rspoptype,

W_FILESIZE TYPE I,

T_OTFDATA TYPE SSFCRESCL.

CALL FUNCTION 'SSF_GET_DEVICE_TYPE'

EXPORTING

i_language = v_language

i_application = 'SAPDEFAULT'

IMPORTING

e_devtype = v_e_devtype.

st_output_options-tddest = SPACE.

st_control_parameters-no_dialog = 'X'.

st_control_parameters-getotf = 'X'.

st_control_parameters-PREVIEW = 'X'.

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'

EXPORTING

formname = 'ZHRMY_SCORECARD'

  • VARIANT = ' '

  • DIRECT_CALL = ' '

IMPORTING

fm_name = fm_name

EXCEPTIONS

no_form = 1

no_function_module = 2

OTHERS = 3.

IF sy-subrc <> 0.

  • WRITE: / 'ERROR 1'.

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

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

ENDIF.

CALL FUNCTION fm_name

EXPORTING

  • ARCHIVE_INDEX =

  • ARCHIVE_INDEX_TAB =

  • ARCHIVE_PARAMETERS =

CONTROL_PARAMETERS = st_control_parameters

  • * MAIL_APPL_OBJ =

  • MAIL_RECIPIENT =

  • MAIL_SENDER =

output_options = st_output_options

USER_SETTINGS = 'X'

job = stext1

org = stext2

ename = ename

basic = basic

local = local

wt_01 = wt_01

wt_02 = wt_02

wt_03 = wt_03

IMPORTING

DOCUMENT_OUTPUT_INFO = st_document_output_info

job_output_info = st_job_output_info

JOB_OUTPUT_OPTIONS = st_job_output_options

TABLES

i_tab = i_tab1

i_tab2 = i_tab2

i_tab3 = i_tab3

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_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.

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 PREVIEW

call function 'SSFCOMP_PDF_PREVIEW'

exporting

i_otf = st_job_output_info-otfdata

exceptions

*convert_otf_to_pdf_error = 1

*cntl_error = 2

*others = 3.

TO SAVE AND DOWNLOAD

.

****........................GET THE FILE NAME TO STORE....................

**CONCATENATE 'MyScorecard' '.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.

**IF sy-subrc <> 0.

**

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

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

*ENDIF.

&----


Have Fun!!

Ira!!

Read only

Former Member
0 Kudos
305

hi

check this code

FORM f1000_download_form.

DATA: form_name TYPE rs38l_fnam.

DATA: wa_ctrlop TYPE ssfctrlop,

wa_outopt TYPE ssfcompop.

DATA: t_otfdata TYPE ssfcrescl,

t_pdf_tab LIKE tline OCCURS 0 WITH HEADER LINE.

DATA: t_otf TYPE itcoo OCCURS 0 WITH HEADER LINE.

DATA: w_filesize TYPE i.

DATA: w_bin_filesize TYPE i.

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'

EXPORTING

formname = 'ZSMARTFORM_SWAR'

  • VARIANT = ' '

  • DIRECT_CALL = ' '

IMPORTING

fm_name = 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.

wa_ctrlop-getotf = 'X'.

wa_ctrlop-no_dialog = 'X'.

wa_outopt-tdnoprev = 'X'.

CALL FUNCTION form_name

EXPORTING

  • ARCHIVE_INDEX =

  • ARCHIVE_INDEX_TAB =

  • ARCHIVE_PARAMETERS =

control_parameters = wa_ctrlop

  • MAIL_APPL_OBJ =

  • MAIL_RECIPIENT =

  • MAIL_SENDER =

output_options = wa_outopt

user_settings = 'X'

mydate = p_date

reason = p_rea

IMPORTING

  • DOCUMENT_OUTPUT_INFO =

job_output_info = t_otfdata

  • 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.

t_otf[] = t_otfdata-otfdata[].

CALL FUNCTION 'CONVERT_OTF'

EXPORTING

format = 'PDF'

max_linewidth = 132

  • ARCHIVE_INDEX = ' '

IMPORTING

bin_filesize = w_bin_filesize

TABLES

otf = t_otf

lines = t_pdf_tab

EXCEPTIONS

err_max_linewidth = 1

err_format = 2

err_conv_not_possible = 3

OTHERS = 4

.

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

EXPORTING

bin_filesize = w_bin_filesize

  • CODEPAGE = ' '

filename = 'd:\test.PDF'

filetype = 'BIN'

  • MODE = ' '

  • WK1_N_FORMAT = ' '

  • WK1_N_SIZE = ' '

  • WK1_T_FORMAT = ' '

  • WK1_T_SIZE = ' '

  • COL_SELECT = ' '

  • COL_SELECTMASK = ' '

  • NO_AUTH_CHECK = ' '

IMPORTING

filelength = w_filesize

TABLES

data_tab = t_pdf_tab

  • FIELDNAMES =

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

OTHERS = 10

.

IF sy-subrc <> 0.

MESSAGE i003(z00) WITH 'File not downloaded succesfully'.

ELSE.

MESSAGE i003(z00) WITH 'File Test.pdf downloaded succesfully '

'under D drive'.

ENDIF.

ENDFORM

thanks

sitaram

Read only

Former Member
0 Kudos
305

hi Narender,

please go through standard report "RSTXPDFT4".

if it is help full pls rewards the points..

Thanks & Regads,

Rahul Kanth Reddy

Read only

Former Member
0 Kudos
305

Hi

Try this code,

report zbc_convert_spool_to_pdf .

tables : tsp01.

data: cmfpnr like nast-cmfpnr,

spool_no like tsp01-rqident,

msg like cmfp-msgv1.

field-symbols <fs>.

selection-screen begin of block blk1 with frame.

parameters : p_spool like tsp01-rqident obligatory,

p_fname type rlgrap-filename obligatory default 'C:\'.

selection-screen end of block blk1.

start-of-selection.

submit rstxpdft4 and return with spoolno = p_spool

with download = 'X'

with p_file = p_fname.

end-of-selection.

Regards

Thushara

Read only

Former Member
0 Kudos
305

Hi,

After executing this code, u need to give there spool request number.

U can get spool request number of smartform in Tcode is SP02.

Then the converted PDF of Smartform output will downloaded to local file.

Regards

Thushara