当前位置: 首页 > news >正文

ABAP PDF预览

画个屏幕
在这里插入图片描述
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.

相关文章:

  • 「自动驾驶背后的数学:从传感器数据到控制指令的函数嵌套」—— 揭秘人工智能中的线性函数、ReLU 与复合函数
  • win10搭建opengl环境搭建并测试--输出立方体球体和碗型并在球体上贴图
  • 使用WebDAV将文件传输到实时(RT)目标 转发
  • 3.数据探索与可视化基本图形(直方图、箱线图、散点图)——Python数据挖掘代码实践
  • 《多语言实时交流辅助系统前端的设计与实现》开题报告
  • Redis 10大核心场景实战手册:从缓存加速到分布式锁的全面解析
  • MySQL-单表查询
  • Fisher 信息矩阵公式原理:使用似然估计,二阶导数等知识点
  • 神经网络微调技术解析
  • 基于Qlearning强化学习的钟摆直立平衡控制策略matlab仿真
  • 大模型 VS 传统算法:人工智能时代的“新老对话“
  • maven在idea上搭建
  • C语言经典代码练习题
  • 【Linux我做主】浅谈Shell及其原理
  • JAVA中关于图形化界面的学习(GUI)动作监听,鼠标监听,键盘监听
  • ESP32的IDF开发学习-驱动ov2640并显示在屏幕上
  • C++(八)vector
  • 国产编辑器EverEdit - 语法着色文件的语法
  • 【一起来学kubernetes】16、CronJob使用详解
  • OpenGL 将屏幕上的二维坐标转换为三维空间中的一个点
  • 人到中年为何腰围变粗?科学家发现腹部脂肪增加的细胞元凶
  • 汽车爆炸致俄军中将死亡嫌疑人被羁押,作案全过程披露
  • 女乘客遭顺风车甩客、深夜丢高速服务区,滴滴霸道回应:赔五百元
  • 马上评|演唱会云集,上海如何把“流量”变“留量”
  • 王羲之《丧乱帖》在日本流传了1300年,将在大阪展23天
  • 《我的后半生》:人生下半场,也有活力重启的可能