How to download graphics from se78

本文介绍了一种使用ABAP编程语言从BDS中获取位图图像并将其下载到指定文件夹的方法。通过定义变量和表格,程序实现了图像的检索、转换及下载功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用如下代码最方便:

REPORT  ZDOWN_LOGO.

*********************************************************************
* Variable declaration
*********************************************************************
DATA: V_GRAPHIC_SIZE TYPE I,
      V_GRAPHIC_XSTR TYPE XSTRING,
      V_GRAPHIC_CONV TYPE I,
      V_GRAPHIC_OFFS TYPE I,
      V_FILE         TYPE STRING.

*********************************************************************
* Table declaration
*********************************************************************
DATA: BEGIN OF I_GRAPHIC_TABLE OCCURS 0,
        LINE(255) TYPE X,
      END OF I_GRAPHIC_TABLE.

*********************************************************************
* Structure declaration
*********************************************************************
DATA: ST_STXBITMAPS       TYPE STXBITMAPS.

*********************************************************************
* Selection screen
*********************************************************************
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETERS: P_OBJECT LIKE ST_STXBITMAPS-TDOBJECT DEFAULT 'GRAPHICS'
                              MODIF ID ABC ,
            P_NAME   LIKE ST_STXBITMAPS-TDNAME,
            P_ID     LIKE ST_STXBITMAPS-TDID DEFAULT 'BMAP'
                              MODIF ID ABC ,
            P_TYPE   LIKE ST_STXBITMAPS-TDBTYPE,
            P_DIR    TYPE LOCALFILE.SELECTION-SCREEN END OF BLOCK B1.

*********************************************************************
* At Selection-screen output event
*********************************************************************
AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    IF SCREEN-GROUP1 = 'ABC' .
      SCREEN-INPUT = '0'.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.

*********************************************************************
* At Selection-screen on value-request event
*********************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_DIR.
  DATA: L_FOLDER TYPE STRING.
  CALL METHOD CL_GUI_FRONTEND_SERVICES=>DIRECTORY_BROWSE
    EXPORTING
      WINDOW_TITLE         = 'Select Folder'
      INITIAL_FOLDER       = 'C:/'
    CHANGING
      SELECTED_FOLDER      = L_FOLDER
    EXCEPTIONS
      CNTL_ERROR           = 1
      ERROR_NO_GUI         = 2
      NOT_SUPPORTED_BY_GUI = 3
      OTHERS               = 4.  IF SY-SUBRC = 0.    P_DIR = L_FOLDER.  ENDIF.

*********************************************************************
* Start-of-selection event
*********************************************************************
START-OF-SELECTION.
  ST_STXBITMAPS-TDOBJECT = P_OBJECT.
  ST_STXBITMAPS-TDNAME = P_NAME.
  ST_STXBITMAPS-TDID = P_ID.
  ST_STXBITMAPS-TDBTYPE = P_TYPE.

* Get the bmp image from BDS in hex string format
  CALL METHOD CL_SSF_XSF_UTILITIES=>GET_BDS_GRAPHIC_AS_BMP
    EXPORTING
      P_OBJECT       = ST_STXBITMAPS-TDOBJECT
      P_NAME         = ST_STXBITMAPS-TDNAME
      P_ID           = ST_STXBITMAPS-TDID
      P_BTYPE        = ST_STXBITMAPS-TDBTYPE
    RECEIVING
      P_BMP          = V_GRAPHIC_XSTR
    EXCEPTIONS
      NOT_FOUND      = 1
      INTERNAL_ERROR = 2
      OTHERS         = 3.
  IF SY-SUBRC = 0.

*   Find the length of hex string
    V_GRAPHIC_SIZE = XSTRLEN( V_GRAPHIC_XSTR ).
    CHECK V_GRAPHIC_SIZE > 0.

    V_GRAPHIC_CONV = V_GRAPHIC_SIZE.
    V_GRAPHIC_OFFS = 0.

*   Populate internal table from this hex string
    WHILE V_GRAPHIC_CONV > 255.
      I_GRAPHIC_TABLE-LINE = V_GRAPHIC_XSTR+V_GRAPHIC_OFFS(255).
      APPEND I_GRAPHIC_TABLE.
      V_GRAPHIC_OFFS = V_GRAPHIC_OFFS + 255.
      V_GRAPHIC_CONV = V_GRAPHIC_CONV - 255.
    ENDWHILE.

    I_GRAPHIC_TABLE-LINE = V_GRAPHIC_XSTR+V_GRAPHIC_OFFS(V_GRAPHIC_CONV).
    APPEND I_GRAPHIC_TABLE.

*   Prepare file name and file path
    CONCATENATE P_DIR '/' P_NAME '.BMP' INTO V_FILE.

*   Download image
    CALL FUNCTION 'GUI_DOWNLOAD'
      EXPORTING
        BIN_FILESIZE            = V_GRAPHIC_SIZE
        FILENAME                = V_FILE
        FILETYPE                = 'BIN'
      TABLES
        DATA_TAB                = I_GRAPHIC_TABLE
      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.
      WRITE: 'File downloaded successfully'(002).
    ELSE.
      WRITE: 'Error during file download'(003).
    ENDIF.
  ELSE.
    CASE SY-SUBRC.

    WHEN 1.
        WRITE: 'Image not found'(004).
      WHEN OTHERS.
        WRITE: 'Error in Image retrieval'(005).
    ENDCASE.
  ENDIF.

在Google Colab中下载文件通常有两种方法: 1. 直接下载:如果你想要下载的是某个运行结果或者已经保存到本地的数据,可以右键点击文件名,然后选择 "Download" 来下载。这种方法适用于浏览器支持直接下载的情况。 2. 使用 `!wget` 或 `!pip install wget` 下载:对于需要从URL获取的外部资源,你可以使用Python的 `wget` 库。首先确保安装了 `wget`(如果没有,可以通过 `!pip install wget` 安装),然后添加以下代码来下载文件: ```python import os url = 'http://example.com/path/to/file' output_path = '/content/downloaded_file.txt' # 替换为你的本地路径 os.system(f'wget {url} -O {output_path}') ``` 3. 将数据保存到Google Drive:如果文件较大,直接下载可能有限制,可以将文件上传至你的Google云端硬盘(Google Drive),然后从那里下载。首先通过 `from google.colab import drive` 导入Drive API,然后授权登录,接着执行类似的操作: ```python from google.colab import drive drive.mount('/content/gdrive') # 需要第一次运行此命令并提供谷歌账号授权 # 然后将文件上传到 Google Drive file_to_upload = '/content/myfile.txt' # 你的文件路径 drive.mount('/content/gdrive', force_remount=True) # 可能需要这个选项强制重新挂载 gdrive_path = '/content/gdrive/MyDrive/your_folder_name' # 文件上传的目标位置 uploaded = drive.upload(file_to_upload, gdrive_path) # 最后从 Google Drive 下载文件 downloaded_file = drive.Path(gdrive_path + '/' + uploaded.name) downloaded_file.download(output_path) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值