SAP中将URL的图片转化为BMP格式图片并上传se78,通过smartforms直接调用

最近遇到一个需求需要将外围系统传输,图片放到smartforms上用于打印,外围系统是直接将图片上传到了文件共享盘,通过接口将图片的URL链接发送给sap,并存储在底表中

注:如果16进制数据转化为BMP格式时报错,可能是开发机的sm59中的rfc没有成功链接,到测试机或者正式机看下如果可以链接成功,即可以在测试机使用

如图所示

本文的实现方式:通过HTTP请求访问,获取到图片的16进制数据,然后将图片数据转化为bmp格式,重构sap标准form :IMPORT_BITMAP_BDSIMPORT_BITMAP_BDS_16将图片上传到se78,并直接指定图片的名称,下次打印时图片即会覆盖,避免了,上传大量图片到sap服务器的缺点.

代码如下:

REPORT ZABAP073.

TABLES:ZTMM001.
DATA: URL TYPE STRING .
DATA: CONTENT TYPE XSTRING.
DATA:IN_PICTURE TYPE  STRING .
DATA : HTTP_CLIENT TYPE REF TO IF_HTTP_CLIENT.
DATA: GO_IMAGE_PROCESSOR TYPE REF TO CL_FXS_IMAGE_PROCESSOR,
      G_HANDLE           TYPE I.

DATA:G_BUFFER_OLD TYPE XSTRING,
     G_BUFFER_NEW TYPE XSTRING.
DATA: L_TYPE     TYPE STRING,
      L_XRES     TYPE I,
      L_YRES     TYPE I,
      L_XDPI     TYPE I,
      L_YDPI     TYPE I,
      L_BITDEPTH TYPE I.
DATA: E_TYPE    TYPE   SY-MSGTY,
      E_MESSAGE TYPE  STRING.
DATA: LV_URL    TYPE STRING,
      LT_BINARY TYPE TABLE OF XSTRING,
      LT_DATA   TYPE TABLE OF SOLIX,
      LV_LENGTH TYPE I.

INCLUDE ZABAP073_S01. "屏幕

INCLUDE ZABAP073_F01.



*&---------------------------------------------------------------------*
*& 包含               ZABAP073_S01
*&---------------------------------------------------------------------*

SELECTION-SCREEN BEGIN OF BLOCK BK1 WITH FRAME TITLE TEXT-T01.
  PARAMETERS :
*    p_URL  type string ,
      P_MATNR  TYPE ZTMM001-MATNR.

SELECTION-SCREEN END OF BLOCK BK1.





*&---------------------------------------------------------------------*
*& 包含               ZABAP073_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& 包含               ZABAP071_F01
*&---------------------------------------------------------------------*

*url = p_url.

  SELECT SINGLE ZTUPIAN
    INTO @URL
    FROM ZTMM001
    WHERE MATNR = @P_MATNR.

  CALL METHOD CL_HTTP_CLIENT=>CREATE_BY_URL
    EXPORTING
      URL                = URL
    IMPORTING
      CLIENT             = HTTP_CLIENT
    EXCEPTIONS
      ARGUMENT_NOT_FOUND = 1
      PLUGIN_NOT_ACTIVE  = 2
      INTERNAL_ERROR     = 3
      OTHERS             = 4.
  IF SY-SUBRC = 0.
  HTTP_CLIENT->SEND( ).
   call method cl_http_client=>GET_LAST_ERROR
    importing
      message = zmessage.

  HTTP_CLIENT->RECEIVE( ).
     call method cl_http_client=>GET_LAST_ERROR
    importing
       message = zmessage.


  CONTENT = HTTP_CLIENT->RESPONSE->GET_DATA( ).
       call method cl_http_client=>GET_LAST_ERROR
    importing
       message = zmessage.
  HTTP_CLIENT->CLOSE( ).
  ENDIF.




  IF CONTENT IS NOT INITIAL.
    G_BUFFER_OLD = CONTENT.


    CREATE OBJECT GO_IMAGE_PROCESSOR.

    "添加到IMAGE_PROCESSOR中
    G_HANDLE = GO_IMAGE_PROCESSOR->ADD_IMAGE( IV_DATA = G_BUFFER_OLD  IV_IMAGE_NAME = '456' ).

    "尺寸缩小至100*100
    CALL METHOD GO_IMAGE_PROCESSOR->GET_INFO
      EXPORTING
        IV_HANDLE   = G_HANDLE
      IMPORTING
        EV_MIMETYPE = L_TYPE
        EV_XRES     = L_XRES
        EV_YRES     = L_YRES
        EV_XDPI     = L_XDPI
        EV_YDPI     = L_YDPI
        EV_BITDEPTH = L_BITDEPTH.

   IF L_XRES > L_YRES.
    L_YRES = L_YRES /  L_XRES / 100.
    L_XRES = 100.
  ELSE.
    L_XRES = L_XRES /  L_YRES / 100.
    L_YRES = 100.
  ENDIF.

    "压缩图片
    CALL METHOD GO_IMAGE_PROCESSOR->RESIZE
      EXPORTING
        IV_HANDLE = G_HANDLE
        IV_XRES   = L_YRES
        IV_YRES   = L_YRES.

    "转为BMP格式
    CALL METHOD GO_IMAGE_PROCESSOR->CONVERT
      EXPORTING
        IV_HANDLE = G_HANDLE
        IV_FORMAT = 'image/x-ms-bmp'.

    "取压缩后的图片
    CALL METHOD GO_IMAGE_PROCESSOR->GET_IMAGE
      EXPORTING
        IV_HANDLE  = G_HANDLE
      RECEIVING
        RV_XSTRING = G_BUFFER_NEW.

    DATA: BEGIN OF P_BITMAP OCCURS 0,
            L(64) TYPE X,
          END OF P_BITMAP.
    DATA: P_FILENAME   TYPE RLGRAP-FILENAME,
          P_NAME       TYPE STXBITMAPS-TDNAME,
          P_TITLE      LIKE BAPISIGNAT-PROP_VALUE,
          P_DOCID      TYPE STXBITMAPS-DOCID,
          P_RESOLUTION TYPE STXBITMAPS-RESOLUTION,
          P_BYTECOUNT  TYPE I.

    "上传bmp图片
    CLEAR:P_FILENAME,P_NAME,P_DOCID,P_RESOLUTION.
    P_FILENAME = ''.
    P_NAME = 'TP'.
    P_TITLE = '图片'.

    P_BYTECOUNT = XSTRLEN( G_BUFFER_NEW ).

    CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
      EXPORTING
        BUFFER     = G_BUFFER_NEW
*       APPEND_TO_TABLE       = ' '
*   IMPORTING
*       OUTPUT_LENGTH         =
      TABLES
        BINARY_TAB = P_BITMAP.

    PERFORM IMPORT_BITMAP_BDS_16 "IN PROGRAM SAPLSTXBITMAPS
    USING P_FILENAME                   "文件路径
          P_NAME "p_name            "名字
          'GRAPHICS'"p_object          "对象 固定为 GRAPHIC
          'BMAP'"p_id                  "ID 固定为 BMAP
          'BCOL'"'BMON'"p_btype        "颜色模式 BMON黑白  BCOL彩色
          'BMP'"p_format               "BMP 格式
          P_TITLE"description    "描述
          ''"p_resident               "依照打印请求驻留在打印机内存中 X 驻留
          'X'"p_autoheight              "自动高度
          'X'"p_bmcomp                 "是否压缩
          P_BYTECOUNT
          P_BITMAP[]                   "图片16进制数据
    CHANGING  P_DOCID                      "文档ID
           P_RESOLUTION
           E_TYPE.                "分辨率


    IF E_TYPE = 'E'.
      E_MESSAGE = '图片上传失败!'.
    ELSE.
      E_TYPE = 'S'.
      E_MESSAGE = '成功!'.

      PERFORM DY_SMARTFORMS.

    ENDIF.

  ENDIF.




  "LSTXBITMAPSTOP
*function-pool stxbitmaps      message-id td.

***include rstxdata.
  INCLUDE RSTXBOOL.          " Boolean type and constants
  INCLUDE RSTXDATAITF.       " Special characters and strings in ITF
  INCLUDE RSTXDATATEXTS.     " Text administration and text interface
  INCLUDE RSTXDATABMP.       " Bitmap constants
  INCLUDE RSTXDATAUNITS.     " Units
  INCLUDE RSTXDATAOTF.       " OTF-ID's (PrintControl)

  TABLES: RSTXU, RSSCG,          " Screen fields
          ITCTH, RLGRAP, STXH,
          PSTXT.                 " SPA/GPA
  TABLES: TTXOB, TTXID, TTXGR.                              "#EC NEEDED
  TABLES: STXBITMAPS.            "BDS bitmaps

  TYPE-POOLS: SHLP,              " for Help functions
              SBDST.             " for BDS functions

  INCLUDE LSTXBITMAPSSEL.        " selection screens

*************************************************************
* SAPscript bitmap utility functions
*************************************************************
  CONSTANTS:
    C_OTF_RD_OTFBITMA(16)         VALUE '4F54466269746D61',
    C_OTF_RD_FF                   TYPE X VALUE 'FF',
    C_OTF_RD_FORMATID_BMON        TYPE X VALUE '01',
    C_OTF_RD_FORMATID_BCOL        TYPE X VALUE '02',
    C_OTF_RD_SUBFORMATID_NONE     TYPE X VALUE '00',
    C_OTF_RD_SUBFORMATID_BDS      TYPE X VALUE '01',
    C_OTF_RD_FORMATPAR1_NONRESI   TYPE X VALUE '00',
    C_OTF_RD_FORMATPAR1_RESI      TYPE X VALUE '01',
    C_OTF_RD_FORMATPAR1_HI_NOCOMP TYPE X VALUE '00',
    C_OTF_RD_FORMATPAR1_HI_RUNL   TYPE X VALUE '10',
    C_OTF_RD_FORMATPAR2_NONE      TYPE X VALUE '00',
    C_OTF_RD_IMAGEID_LEN          TYPE I VALUE 90,
    C_BM_FORMAT_ITF(3)            TYPE C VALUE 'ITF',
    C_BM_FORMAT_BMP(3)            TYPE C VALUE 'BMP',
    C_BM_FORMAT_BDS(3)            TYPE C VALUE 'BDS',
    C_ITF_TLINE_LEN  &n
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值