如何将内表生成PDF格式的输出:
主要有两种方法:
1)使用中间构件,例如SmartForm借助于生成OTF文件,然后将OTF文件转换成PDF,最终下载下来,涉及的主要函数CONVERT_OTF,
2)直接生成OTF,然后转成PDF
3)可以直接将数据发送到SPOOL(未研究,原理有点像)
*--------------------------------------------------------------------*
* data declereration
*--------------------------------------------------------------------*
DATA:
lt_flight TYPE zsflight_t WITH HEADER LINE.
DATA:
funname TYPE rs38l_fnam.
DATA:l_outset TYPE ssfcompop.
DATA:
w_form_name TYPE tdsfname VALUE 'Z_SFLIGHT',
w_cparam TYPE ssfctrlop,
w_bin_filesize TYPE i," Binary File Size
w_filename TYPE string,
w_file_path TYPE string,
w_full_path TYPE string.
* Internal table to hold otf data
DATA:
t_otf TYPE itcoo OCCURS 0 WITH HEADER LINE,
* Internal table to hold data read from the smartform
t_otf_from_fm TYPE ssfcrescl,
* Internal table to hold data from FM Convert_OTF
t_pdf_tab LIKE tline OCCURS 0 WITH HEADER LINE.
*--------------------------------------------------------------------*
* get data from the table
*--------------------------------------------------------------------*
SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_flight
FROM sflight AS a JOIN scarr AS b
ON a~carrid = b~carrid.
*--------------------------------------------------------------------*
* delete duplicated lines
*--------------------------------------------------------------------*
SORT lt_flight BY carrid ASCENDING.
"DELETE ADJACENT DUPLICATES FROM lt_flight.
* call function to generate smartforms name
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = w_form_name
* VARIANT = ' '
* DIRECT_CALL = ' '
IMPORTING
fm_name = funname
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
* GET_OTF parameter in the CONTROL_PARAMETERS is set to get the OTF
*formata of the output
"w_cparam-no_dialog = 'X'.
w_cparam-preview = space. " Suppressing the dialog box
w_cparam-getotf = 'X'.
* setting for printing
l_outset-tddest = 'sddfsd'.
l_outset-tdnoprev = ''.
l_outset-tdimmed = 'X'.
l_outset-tdarmod = 1.
* call function
CALL FUNCTION funname
EXPORTING
output_options = l_outset
control_parameters = w_cparam
IMPORTING
job_output_info = t_otf_from_fm.
* Convey the data
t_otf[] = t_otf_from_fm-otfdata[].
* Call Function to convert the otf to pdf
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
format = 'PDF'
max_linewidth = 132
IMPORTING
bin_filesize = w_bin_filesize
* BIN_FILE =
TABLES
otf = t_otf
lines = t_pdf_tab.
* To display the save dialog window
CALL METHOD cl_gui_frontend_services=>file_save_dialog
CHANGING
filename = w_filename
path = w_file_path
fullpath = w_full_path.
* set the file format
CONCATENATE w_file_path '.PDF' INTO w_file_path.
CONCATENATE w_full_path '.PDF' INTO w_full_path.
* download the PDF file to server
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
bin_filesize = w_bin_filesize
filename = w_full_path
filetype = 'BIN'
TABLES
data_tab = t_pdf_tab.
例2(转载)
REPORT z_test_pdf00.
DATA: filesize TYPE i.
DATA header LIKE thead.
DATA options LIKE itcpo.
DATA result LIKE itcpp.
DATA:
gs_sflight TYPE sflight,
gt_sflight TYPE TABLE OF sflight.
DATA otf LIKE itcoo OCCURS 1000 WITH HEADER LINE.
DATA lines LIKE tline OCCURS 100 WITH HEADER LINE.
PARAMETERS p_file LIKE rlgrap-filename DEFAULT 'C:\Documents and Settings\lkong\Desktop\IPMSG\123.PDF'.
SELECT * INTO TABLE gt_sflight FROM sflight.
* Do some operatiion to the table
LOOP AT gt_sflight INTO gs_sflight.
CLEAR lines.
"CONCATENATE gs_sflight-carrid gs_sflight-connid gs_sflight-fldate INTO lines-tdline SEPARATED BY '
lines-tdline = gs_sflight-carrid.
APPEND lines.
lines-tdline = gs_sflight-connid.
APPEND lines.
CLEAR lines.
lines-tdline = gs_sflight-connid.
APPEND lines.
CLEAR lines.
lines-tdline = gs_sflight-fldate.
APPEND lines.
ENDLOOP.
options-tddest = 'LP01'.
options-tdnewid = 'X'.
options-tdgetotf = 'X'.
CALL FUNCTION 'PRINT_TEXT'
EXPORTING
device = 'PRINTER'
dialog = ' '
header = header
OPTIONS = options
IMPORTING
RESULT = RESULT
tables
lines = lines
otfdata = otf
EXCEPTIONS
canceled = 01
device = 02
form = 03
OPTIONS = 04
unclosed = 05
unknown = 06
format = 07
textformat = 08
communication = 09.
* convert to PDF
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
format = 'PDF'
IMPORTING
bin_filesize = filesize
TABLES
otf = otf
lines = lines
EXCEPTIONS
err_conv_not_possible = 1.
CALL FUNCTION 'DOWNLOAD'
EXPORTING
bin_filesize = filesize
filename = p_file
filetype = 'BIN'
TABLES
data_tab = lines.