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 Conversion to PDF

sreeramkumar_madisetty
Active Contributor
0 Likes
1,068

Hi Friends

I have a Smartform : XXXXXX

Driver Program : YYYYYY.

My requirement is : To convert the Smartform output to PDF Form.

Here I didn't want to create a new program and I wish to use the Existing standard program and want to add my functionality in that only.

I have sample code:

TABLES: tsp01.

*

  • TYPES: BEGIN OF t_spool,

  • rqident TYPE tsp01-rqident,

  • END OF t_spool.

  • DATA: i_spool TYPE STANDARD TABLE OF t_spool,

  • wa_spool TYPE t_spool.

*

  • SELECT rqident FROM tsp01

  • INTO TABLE i_spool

  • WHERE rqowner = sy-uname.

*

  • SORT i_spool DESCENDING BY rqident.

*

  • LOOP AT i_spool INTO wa_spool.

  • ENDLOOP.

*

  • TYPES: l_ty_tab_pdf TYPE tline OCCURS 0.

*

  • DATA: l_pdf TYPE l_ty_tab_pdf,

  • l_spool TYPE tsp01-rqident.

*

    • Type for binary attachment table.

  • TYPES: l_ty_tab_objbin TYPE solisti1 OCCURS 0.

*

  • DATA: l_objbin TYPE l_ty_tab_objbin.

  • l_spool = wa_spool-rqident.

*

  • CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'

  • EXPORTING

  • src_spoolid = l_spool

  • no_dialog = ' '

  • TABLES

  • pdf = l_pdf

  • EXCEPTIONS

  • err_no_abap_spooljob = 1

  • err_no_spooljob = 2

  • err_no_permission = 3

  • err_conv_not_possible = 4

  • err_bad_destdevice = 5

  • user_cancelled = 6

  • err_spoolerror = 7

  • err_temseerror = 8

  • err_btcjob_open_failed = 9

  • err_btcjob_submit_failed = 10

  • err_btcjob_close_failed = 11

  • OTHERS = 12.

  • IF sy-subrc 0.

  • WRITE: / 'error', sy-subrc.

  • ENDIF.

*

***/ Convert the PDF format to the table type required for the attachment.

*

  • CALL FUNCTION 'QCE1_CONVERT'

  • TABLES

  • t_source_tab = l_pdf

  • t_target_tab = l_objbin

  • EXCEPTIONS

  • convert_not_possible = 1

  • OTHERS = 2.

  • IF sy-subrc 0.

  • WRITE: / 'error', sy-subrc.

  • ENDIF.

My concern is : Where I have to write this code.

Can you please tell me the eact place in the program I have to write this code.

Regards,

Sree

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
1,042

Check the sample code given below:

REPORT zsuresh_test.


Variable declarations 
DATA:
w_form_name TYPE tdsfname VALUE 'ZSURESH_TEST',
w_fmodule TYPE rs38l_fnam,
w_cparam TYPE ssfctrlop,
w_outoptions TYPE ssfcompop,
W_bin_filesize TYPE i, " Binary File Size
w_FILE_NAME type string,
w_File_path type string,
w_FULL_PATH type string.


Internal tables declaration 


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.


This function module call is used to retrieve the name of the Function 
module generated when the SMARTFORM is activated 

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = w_form_name

VARIANT = ' ' 
DIRECT_CALL = ' ' 
IMPORTING
fm_name = w_fmodule
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.


Calling the SMARTFORM using the function module retrieved above 
GET_OTF parameter in the CONTROL_PARAMETERS is set to get the OTF 
format of the output 
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 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 = 
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_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

ARCHIVE_INDEX = ' ' 
COPYNUMBER = 0 
ASCII_BIDI_VIS2LOG = ' ' 
PDF_DELETE_OTFTAB = ' ' 
IMPORTING
BIN_FILESIZE = W_bin_filesize

BIN_FILE = 
TABLES
otf = T_OTF
lines = T_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.


To display File SAVE dialog window 
CALL METHOD cl_gui_frontend_services=>file_save_dialog

EXPORTING 
WINDOW_TITLE = 
DEFAULT_EXTENSION = 
DEFAULT_FILE_NAME = 
FILE_FILTER = 
INITIAL_DIRECTORY = 
WITH_ENCODING = 
PROMPT_ON_OVERWRITE = 'X' 
CHANGING
filename = w_FILE_NAME
path = w_FILE_PATH
fullpath = w_FULL_PATH

USER_ACTION = 
FILE_ENCODING = 
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 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.


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'

APPEND = ' ' 
WRITE_FIELD_SEPARATOR = ' ' 
HEADER = '00' 
TRUNC_TRAILING_BLANKS = ' ' 
WRITE_LF = 'X' 
COL_SELECT = ' ' 
COL_SELECT_MASK = ' ' 
DAT_MODE = ' ' 
CONFIRM_OVERWRITE = ' ' 
NO_AUTH_CHECK = ' ' 
CODEPAGE = ' ' 
IGNORE_CERR = ABAP_TRUE 
REPLACEMENT = '#' 
WRITE_BOM = ' ' 
TRUNC_TRAILING_BLANKS_EOL = 'X' 
WK1_N_FORMAT = ' ' 
WK1_N_SIZE = ' ' 
WK1_T_FORMAT = ' ' 
WK1_T_SIZE = ' ' 
IMPORTING 
FILELENGTH = 
tables
data_tab = T_pdf_tab

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.

Regards

6 REPLIES 6
Read only

Former Member
0 Likes
1,042

I think after u have called the smartform in your driver program call the FM to convert spool into PDF.

Hope this helps!

Read only

Former Member
0 Likes
1,042

Hi,

check this code which suits your requirement,

Summury: Converting the smartfrom 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.

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,

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_output_options-tdprinter = 'locl'.

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.

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

IF sy-subrc <> 0.

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

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

ELSE.

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

IF sy-subrc <> 0.

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

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

ENDIF.

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

IF sy-subrc <> 0.

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

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

ENDIF.

ENDIF.

seshu.

Read only

Former Member
0 Likes
1,042

hi,

When u see the ouput in the smart form give 'print' for the menu bar option. U will get to see a number in the bottom of the screen, take that spool number and run the standard report 'RSTXPDFT4' and give the number there while executing.

it gives the output as PDF.

Hope this helps u,

Regards,

Arunsri

Read only

Former Member
0 Likes
1,043

Check the sample code given below:

REPORT zsuresh_test.


Variable declarations 
DATA:
w_form_name TYPE tdsfname VALUE 'ZSURESH_TEST',
w_fmodule TYPE rs38l_fnam,
w_cparam TYPE ssfctrlop,
w_outoptions TYPE ssfcompop,
W_bin_filesize TYPE i, " Binary File Size
w_FILE_NAME type string,
w_File_path type string,
w_FULL_PATH type string.


Internal tables declaration 


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.


This function module call is used to retrieve the name of the Function 
module generated when the SMARTFORM is activated 

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = w_form_name

VARIANT = ' ' 
DIRECT_CALL = ' ' 
IMPORTING
fm_name = w_fmodule
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.


Calling the SMARTFORM using the function module retrieved above 
GET_OTF parameter in the CONTROL_PARAMETERS is set to get the OTF 
format of the output 
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 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 = 
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_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

ARCHIVE_INDEX = ' ' 
COPYNUMBER = 0 
ASCII_BIDI_VIS2LOG = ' ' 
PDF_DELETE_OTFTAB = ' ' 
IMPORTING
BIN_FILESIZE = W_bin_filesize

BIN_FILE = 
TABLES
otf = T_OTF
lines = T_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.


To display File SAVE dialog window 
CALL METHOD cl_gui_frontend_services=>file_save_dialog

EXPORTING 
WINDOW_TITLE = 
DEFAULT_EXTENSION = 
DEFAULT_FILE_NAME = 
FILE_FILTER = 
INITIAL_DIRECTORY = 
WITH_ENCODING = 
PROMPT_ON_OVERWRITE = 'X' 
CHANGING
filename = w_FILE_NAME
path = w_FILE_PATH
fullpath = w_FULL_PATH

USER_ACTION = 
FILE_ENCODING = 
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 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.


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'

APPEND = ' ' 
WRITE_FIELD_SEPARATOR = ' ' 
HEADER = '00' 
TRUNC_TRAILING_BLANKS = ' ' 
WRITE_LF = 'X' 
COL_SELECT = ' ' 
COL_SELECT_MASK = ' ' 
DAT_MODE = ' ' 
CONFIRM_OVERWRITE = ' ' 
NO_AUTH_CHECK = ' ' 
CODEPAGE = ' ' 
IGNORE_CERR = ABAP_TRUE 
REPLACEMENT = '#' 
WRITE_BOM = ' ' 
TRUNC_TRAILING_BLANKS_EOL = 'X' 
WK1_N_FORMAT = ' ' 
WK1_N_SIZE = ' ' 
WK1_T_FORMAT = ' ' 
WK1_T_SIZE = ' ' 
IMPORTING 
FILELENGTH = 
tables
data_tab = T_pdf_tab

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.

Regards

Read only

Former Member
0 Likes
1,042

Hi sree ram,

No need for that FMs 'CONVERT_OTFSPOOLJOB_2_PDF'

and 'QCE1_CONVERT.

Just follow these points:

1. While printing the smartform, print that to spool

2. Go to SP01, and see the spool number.

3. Then run the standard program RSTXPDFT4.

4.Down load the smartform in pdf format.

If u reached ur requirement , give me points.

Rgds

Uma

Read only

Former Member
0 Likes
1,042

You can look for Enhancement Points in Standard Program after the function module for Smart form is called. But what is the requirement after converting Smart form to PDF.