画个屏幕
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(
EXPORTING
size = lv_size
type = 'APPLICATION'
subtype = 'TXT'
* subtype = 'JPG'
* subtype = 'PDF'
IMPORTING
assigned_url = lv_url
CHANGING
data_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_tab
pv_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.