"打印相关参数
DATA: l_output_info TYPE ssfcrescl.
DATA: ctrl_param TYPE ssfctrlop,
out_option TYPE ssfcompop.
"调用打印函数
DATA: gwa_result TYPE ssfcrescl,
gwa_output TYPE ssfcompop,
g_filename TYPE string,
g_bin_filesize TYPE i,
git_lines TYPE STANDARD TABLE OF tline,
gwa_control TYPE ssfctrlop.
DATA pdf_content TYPE solix_tab.
DATA pdf_xstring TYPE xstring.
DATA pdf_size TYPE so_obj_len.
DATA bin_size TYPE i.
DATA: lt_lines TYPE TABLE OF tline,
ls_line TYPE tline.
"smartforms
ctrl_param-no_dialog = 'X'. "必要
ctrl_param-getotf = 'X'. "必要
ctrl_param-preview = 'X'.
out_option-tddest = 'LP01'. "设备名称
out_option-tdnewid = 'X'.
out_option-tdimmed = 'X'.
out_option-tddelete = 'X'.
out_option-tdlifetime = 'X'.
out_option-tdprinter = 'CNSAPWIN'.
out_option-xsfformat = 'X'.
CALL FUNCTION lf_fm_name
EXPORTING
control_parameters = ctrl_param
output_options = out_option
IMPORTING
job_output_info = gwa_result
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
format = 'PDF' "ASCII
* max_linewidth = 132
IMPORTING
bin_filesize = bin_size "字节数
bin_file = pdf_xstring "十六进制
TABLES
otf = gwa_result-otfdata
lines = lt_lines
EXCEPTIONS
err_max_linewidth = 1
err_format = 2
err_conv_not_possible = 3
err_bad_otf = 4
OTHERS = 5.
DATA: lv_filename TYPE string,
lv_path TYPE string,
lv_full_path TYPE string,
lv_time TYPE sy-datum.
lv_filename = '&1_&2.pdf'.
lv_time = sy-datum.
REPLACE '&1' WITH pono INTO lv_filename.
REPLACE '&2' WITH lv_time INTO lv_filename.
CONDENSE lv_filename NO-GAPS.
* CALL METHOD cl_gui_frontend_services=>get_desktop_directory
* CHANGING
* desktop_directory = lv_path
* EXCEPTIONS
* cntl_error = 1
* error_no_gui = 2
* not_supported_by_gui = 3
* OTHERS = 4.
*
* IF sy-subrc = 0.
* CALL METHOD cl_gui_cfw=>flush .
* " 用户选择名称、路径
* CALL METHOD cl_gui_frontend_services=>file_save_dialog
* EXPORTING
** window_title = '指定保存文件名'
** default_extension = 'XLSX'
* default_file_name = lv_filename
** file_filter = filetype
* initial_directory = lv_path
* prompt_on_overwrite = 'X'
* CHANGING
* filename = lv_filename
* path = lv_path
* fullpath = lv_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 | 获取文件路径失败!| TYPE 'S' DISPLAY LIKE 'E'.
* ENDIF.
* ELSE.
* MESSAGE | 用户取消操作!| TYPE 'S' DISPLAY LIKE 'E'.
* ENDIF.
"CONVERT_OTF函数输出表lt_lines无数据(笔者也不知道什么原因)
"故用cl_document_bcs=>xstring_to_solix将十六进制转换成二进制
pdf_content = cl_document_bcs=>xstring_to_solix( pdf_xstring ).
lv_full_path = 'C:\SAPPDF\'.
CONCATENATE lv_full_path lv_filename INTO lv_full_path.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
bin_filesize = bin_size
filename = lv_full_path
filetype = 'BIN'
TABLES
data_tab = pdf_content "lt_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.