TABLES: sflight.
TYPE-POOLS: slis.
DATA: gt_spfli TYPE TABLE OF sFLIGHT." WITH HEADER LINE.
DATA: g_repid TYPE sy-repid.
DATA gt_otf TYPE itcoo OCCURS 0 WITH HEADER LINE.
DATA:bin_file TYPE xstring.
DATA:w_bin_filesize TYPE i,
gt_pdf_tab LIKE tline OCCURS 0 WITH HEADER LINE.
DATA tline TYPE TABLE OF tline WITH HEADER LINE..
DATA document_output_info TYPE ssfcrespd.
DATA job_output_info TYPE ssfcrescl.
DATA job_output_options TYPE ssfcresop.
DATA: binfilesize TYPE i,
file_name TYPE string,
file_path TYPE string,
full_path TYPE string.
START-OF-SELECTION.
PERFORM frm_get_data.
END-OF-SELECTION.
PERFORM frm_display.
*&---------------------------------------------------------------------*
*& Form frm_get_data
*&---------------------------------------------------------------------*
* 把数据查询出来放到内表中
*----------------------------------------------------------------------*
FORM frm_get_data .
SELECT * INTO TABLE gt_spfli FROM sflight.
ENDFORM. " frm_get_data
*&---------------------------------------------------------------------*
*& Form frm_display
*&---------------------------------------------------------------------*
* 使用ALV显示数据
*----------------------------------------------------------------------*
FORM frm_display .
g_repid = sy-repid.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = g_repid
i_structure_name = 'SFLIGHT'
i_callback_pf_status_set = 'FRM_SET_MENU'
i_callback_user_command = 'FRM_USER_COMMAND'
i_save = 'A'
TABLES
t_outtab = gt_spfli.
ENDFORM. " frm_display
*&---------------------------------------------------------------------*
*& Form frm_show_status
*&---------------------------------------------------------------------*
* 调用状态栏
*----------------------------------------------------------------------*
FORM frm_set_menu USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'STANDARD'.
ENDFORM. "frm_set_menu
*&---------------------------------------------------------------------*
*& Form frm_user_command
*&---------------------------------------------------------------------*
* 用户按钮事件
*----------------------------------------------------------------------*
* -->P_UCOMM text
* -->SELFIELD text
*----------------------------------------------------------------------*
FORM frm_user_command USING p_ucomm LIKE sy-ucomm selfield TYPE slis_selfield.
CASE p_ucomm.
WHEN 'PRTTABLE'.
PERFORM frm_print_table.
WHEN 'PRTTEMPLET'.
PERFORM frm_print_templet.
WHEN 'EXIT' OR 'CANCEL' OR 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'SAVE'.
WRITE:'hello world'.
ENDCASE.
ENDFORM. "FRM_USER_COMMAND
*&---------------------------------------------------------------------*
*& Form frm_print_table
*&---------------------------------------------------------------------*
* 调用使用TABLE创建的模板
*----------------------------------------------------------------------*
FORM frm_print_table .
* WRITE:'HELLO WORLD'.
DATA: fm_name TYPE rs38l_fnam.
DATA:control_parameters TYPE ssfctrlop,
w_outoptions TYPE ssfcompop,
errtab TYPE tsferror.
CLEAR control_parameters.
control_parameters-no_dialog = 'X'.
control_parameters-preview =''. "space.
control_parameters-getotf = 'X'.
* control_parameters-no_open ='X'.
* control_parameters-no_close ='X'.
control_parameters-langu = sy-langu.
w_outoptions-tddest = 'LP01'.
w_outoptions-tdnoprint = 'X'.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZYKK004'
IMPORTING
fm_name = fm_name.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* FM_NAME 即 '/1BCDWB/SF00000210'
CALL FUNCTION fm_name
EXPORTING
control_parameters = control_parameters
output_options = w_outoptions
user_settings = 'X'
IMPORTING
document_output_info = document_output_info
job_output_info = job_output_info
job_output_options = job_output_options
TABLES
gt_out = gt_spfli.
* CALL FUNCTION fm_name
** EXPORTING
** ARCHIVE_INDEX =
** ARCHIVE_INDEX_TAB =
** ARCHIVE_PARAMETERS =
** CONTROL_PARAMETERS =
** MAIL_APPL_OBJ =
** MAIL_RECIPIENT =
** MAIL_SENDER =
** OUTPUT_OPTIONS =
** USER_SETTINGS = 'X'
** IMPORTING
** DOCUMENT_OUTPUT_INFO =
** JOB_OUTPUT_INFO =
** JOB_OUTPUT_OPTIONS =
* TABLES
* gt_out = gt_spfli
** 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.
gt_otf[] = job_output_info-otfdata[].
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 = bin_file
* BIN_FILE=
TABLES
otf = gt_otf
lines = tline
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
* WITHsy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
CHANGING
filename = file_name
path = file_path
fullpath = full_path.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
bin_filesize = binfilesize
filename = full_path
filetype = 'BIN'
TABLES
data_tab = tline[]
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.
ENDFORM. " frm_print_table
*&---------------------------------------------------------------------*
*& Form FRM_PRINT_TEMPLET
*&---------------------------------------------------------------------*
* 调用使用模板创建的模板
*----------------------------------------------------------------------*
FORM frm_print_templet .
DATA: l_fm_name TYPE rs38l_fnam.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZYKK002'
IMPORTING
fm_name = l_fm_name.
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 l_fm_name
* EXPORTING
* ARCHIVE_INDEX =
* ARCHIVE_INDEX_TAB =
* ARCHIVE_PARAMETERS =
* CONTROL_PARAMETERS =
* MAIL_APPL_OBJ =
* MAIL_RECIPIENT =
* MAIL_SENDER =
* OUTPUT_OPTIONS =
* USER_SETTINGS = 'X'
* IMPORTING
* DOCUMENT_OUTPUT_INFO =
* JOB_OUTPUT_INFO =
* JOB_OUTPUT_OPTIONS =
TABLES
gt_out = gt_spfli
* 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.
ENDFORM. " FRM_PRINT_TEMPLET
完美生成PDF格式!!!
1、SMARTFORM 转PDF文件时,只是用FUNCTION CONVERT_OTF进行了格式转换。
2、在SMARTFORM的输出文档中,调用FUNCTION输出时,输出参数control_parameters-no_dialog必须设置成‘X’,同时control_parameters-getotf节设置成'X'。这样调用 FUNCTIONCONVERT_PDF时,才有输入参数。
3、调用FUNCTIONCONVERT_PDF时须注意,如果要将PDF文件下载,必须使用转化后的内表数据,将PDF格式的内表下载成PDF的文件。而如果将PDF文件传到一个第三方软件或是提供给接口使用,则可以直接传输转换后的二进制的文件。