画个屏幕
PDF JPG TXT都可以参考预览,把二进制流传递给标准函数就行
*&---------------------------------------------------------------------*
*& Report YDEMO2
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ydemo2.DATA: gr_viewer TYPE REF TO cl_gui_html_viewer,gr_ctn TYPE REF TO cl_gui_custom_container.CALL SCREEN '9001' STARTING AT 5 5 ENDING AT 120 30 .*&---------------------------------------------------------------------*
*& Module STATUS_9001 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_9001 OUTPUT.DATA: lt_solix TYPE solix_tab,lv_size TYPE i,lv_url TYPE c LENGTH 255.SET PF-STATUS 'STATUS_9001'." 初始化容器对象gr_ctn = NEW #( container_name = 'CC_VIEWER' ).gr_viewer = NEW #( parent = gr_ctn )." 读取数据流PERFORM frm_download_data CHANGING lt_solix lv_size.gr_viewer->load_data(EXPORTINGsize = lv_sizetype = 'APPLICATION'subtype = 'TXT'
* subtype = 'JPG'
* subtype = 'PDF'IMPORTINGassigned_url = lv_urlCHANGINGdata_table = lt_solix).gr_viewer->show_data( url = lv_url ).ENDMODULE.*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9001 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_9001 INPUT.CASE sy-ucomm.WHEN 'ZEXIT'.LEAVE PROGRAM.WHEN OTHERS.ENDCASE.ENDMODULE.*&---------------------------------------------------------------------*
*& Form frm_download_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& <-- LT_SOLIX
*&---------------------------------------------------------------------*
FORM frm_download_data CHANGING pt_solix TYPE solix_tabpv_size TYPE i.DATA: lv_error TYPE c VALUE 'X',lv_name TYPE string,lv_path TYPE string,lv_fullpath TYPE string,lv_extension TYPE string,lv_filename TYPE string,lt_result TYPE match_result_tab,ls_result TYPE match_result.DATA: lt_solix TYPE solix_tab,ls_solix TYPE solix,lv_file_length TYPE i,lv_content TYPE xstring,lv_max_length TYPE i VALUE 255,lv_actual_length TYPE i.FIELD-SYMBOLS: <fs_server_path> TYPE string.
* FIELD-SYMBOLS: <fs_server_path> TYPE any.lv_name = '/mnt/smbshare/DS4/GTS/1000000000_海关审批单20250225171352.txt'.
* lv_name = '/mnt/smbshare/DS4/GTS/1000000000_通关单20250225171400.jpg'.
* lv_name = '/mnt/smbshare/DS4/GTS/1000000000_报关单20250225171404.pdf'.ASSIGN lv_name TO <fs_server_path>.IF <fs_server_path> IS ASSIGNED AND <fs_server_path> IS NOT INITIAL." 文件名提取FIND ALL OCCURRENCES OF REGEX '[^/\\]+[/\\]*$' IN <fs_server_path> RESULTS lt_result.IF sy-subrc = 0.READ TABLE lt_result INTO ls_result INDEX 1.lv_filename = <fs_server_path>+ls_result-offset(ls_result-length).lv_extension = lv_filename.REPLACE ALL OCCURRENCES OF REGEX '\.\w*' IN lv_filename WITH ''. " 正则删除后缀,取文件名REPLACE ALL OCCURRENCES OF REGEX '.+\.' IN lv_extension WITH ''. " 正则删除文件名,取后缀" 选择文件保存路径
* cl_gui_frontend_services=>file_save_dialog(
* EXPORTING
* default_extension = lv_extension
* default_file_name = lv_filename
* CHANGING
* filename = lv_filename
* path = lv_path
* fullpath = lv_fullpath
* EXCEPTIONS
* OTHERS = 1 ).
* IF sy-subrc <> 0 OR lv_fullpath IS INITIAL.
* MESSAGE s028(zgts001) DISPLAY LIKE 'E'. " 未选择文件保存路径
* RETURN.
* ENDIF." 下载文件OPEN DATASET <fs_server_path> FOR INPUT IN BINARY MODE.IF sy-subrc = 0.DO.CLEAR: ls_solix, lv_actual_length.READ DATASET <fs_server_path> INTO ls_solix-line MAXIMUM LENGTH lv_max_length ACTUAL LENGTH lv_actual_length.IF lv_actual_length IS INITIAL.EXIT.ELSE.APPEND ls_solix TO lt_solix.lv_file_length += lv_actual_length.ENDIF.ENDDO.CLOSE DATASET <fs_server_path>." 转换二进制IF lt_solix IS NOT INITIAL.
*
* " 下载本地
* CALL FUNCTION 'GUI_DOWNLOAD'
* EXPORTING
* filename = lv_fullpath
* filetype = 'BIN'
* TABLES
* data_tab = lt_solix.
* IF sy-subrc = 0.CLEAR lv_error.
* ENDIF.
*ENDIF.ENDIF.ENDIF.ENDIF.IF lv_error = 'X'.MESSAGE s027(zgts001) DISPLAY LIKE 'E'. " 根据屏幕路径下载服务器文件失败RETURN.ENDIF.pv_size = lv_file_length.pt_solix = lt_solix.ENDFORM.