top of page

SAP ABAP - Get QR Code from Google API

Updated: Aug 29, 2022



 



*"*"Local Interface:
*"  IMPORTING 
*"     REFERENCE(I_QR_TEXT) TYPE  CHAR50
*"     REFERENCE(I_WIDTH) TYPE  CHAR3 DEFAULT '50'
*"     REFERENCE(I_HEIGHT) TYPE  CHAR3 DEFAULT '50'
*"     REFERENCE(I_WNAME) TYPE  CHAR40 DEFAULT 'ZZQRCODE'
*"  EXPORTING
*"     reference(e_w_name) TYPE  char40
*"----------------------------------------------------------------------    
check i_qr_text is not initial and i_wname is not initial.
PERFORM f_clear.
 gv_text = i_qr_text.
 gv_width = i_width.
 gv_height = i_height.
 gv_w_name = i_wname.

PERFORM download_qrcode USING i_qr_text i_width i_height.
PERFORM convert_image.
 e_w_name = i_wname. " se78 bmap


*&---------------------------------------------------------------------* *&      TOP
*&---------------------------------------------------------------------*
DATA : bds_description LIKE bapisignat-prop_value,
* bds handlingconstants:
        c_bds_classname TYPE sbdst_classname VALUE 'DEVC_STXD_BITMAP',
        c_bds_classtype TYPE sbdst_classtype VALUE 'OT',
" others
        c_bds_mimetype  TYPE bds_mimetp VALUE 'application/octet-stream',
        c_bds_original  TYPE sbdst_doc_var_tg VALUE 'OR',
* Graphic handling constants:

        c_stdtext       LIKE thead-tdobject VALUE 'TEXT',
        c_graphics      LIKE thead-tdobject VALUE 'GRAPHICS',
        c_bmon          LIKE thead-tdid VALUE 'BMON',
        c_bcol          LIKE thead-tdid     VALUE 'BCOL'.

DATA: gi_filename   TYPE rlgrap-filename,
       gi_name       TYPE stxbitmaps-tdname,
       gi_object     TYPE stxbitmaps-tdobject,
       gi_id         TYPE stxbitmaps-tdid,
       gi_btype      TYPE stxbitmaps-tdbtype,
       gi_resident   TYPE stxbitmaps-resident,
       gi_autoheight TYPE stxbitmaps-autoheight,
       gi_bmcomp     TYPE stxbitmaps-bmcomp,
       gi_resolution TYPE stxbitmaps-resolution,
       l_extension   TYPE rlgrap-filename,
       l_docid       TYPE stxbitmaps-docid.

"Picture Control
DATA: picture_container TYPE REF TO cl_gui_custom_container,
       picture_control   TYPE REF TO cl_gui_picture.

DATA: l_img_url TYPE w3url.
DATA :l_img_subtype TYPE w3param-cont_type.
DATA : l_str_length TYPE i.
DATA : url TYPE string.
DATA :  l_content_length TYPE i.
DATA :  mime TYPE w3mimetabtype.
DATA: blob      TYPE w3mimetabtype,
       blob_size TYPE w3param-cont_len,
       blob_type TYPE w3param-cont_type.

DATA : i_igs_image_converter TYPE REF TO cl_igs_image_converter.
DATA: content TYPE xstring.
DATA : http_client TYPE REF TO if_http_client.
TYPES : BEGIN OF ty_binary,
           binary_field(1000) TYPE c,
END OF ty_binary.

DATA : hex_tab1 TYPE TABLE OF ty_binary WITH HEADER LINE .
DATA: gv_text(50),
       gv_width      TYPE int3,
       gv_height     TYPE int3,
       gv_w_name(40). " se78 bmap name
*&---------------------------------------------------------------------*
*&      Form  F_CLEAR
*&---------------------------------------------------------------------*
FORM f_clear .
CLEAR: gv_text ,
   gv_width,
   gv_height,
   gv_w_name ,
   gi_filename,
   gi_name,
   gi_object ,
   gi_id,gi_btype,
   gi_resident,
   gi_autoheight ,
   gi_bmcomp,
   gi_resolution,
   l_extension ,
   l_docid,
   l_img_url,
   l_img_subtype,
   l_str_length ,
   url,
   l_content_length,mime[] ,
   blob[],
   blob_size,
   blob_type,
   i_igs_image_converter,
   content ,
   http_client,
   hex_tab1[].
ENDFORM.                    " F_CLEAR

*&---------------------------------------------------------------------*
*&      Form  DOWNLOAD_QRCODE
*&---------------------------------------------------------------------*
FORM download_qrcode  USING  p_text p_width p_height.
CONDENSE p_width NO-GAPS.
CONDENSE p_height NO-GAPS.
CONCATENATE 'http://chart.apis.google.com/chart?chs='
                p_width
'x'
                p_height
'&cht=qr&chld=|1&chl='
                p_text "'/chart.png'
INTO url.
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( ).
     http_client->receive( ).
     content = http_client->response->get_data( ).
     http_client->close( ).
     l_str_length = xstrlen( content ).
CALL FUNCTION 'RSFO_XSTRING_TO_MIME'
EXPORTING
         c_xstring = content
         i_length  = l_str_length
TABLES
         c_t_mime  = mime.
ENDIF.
ENDFORM.                    " DOWNLOAD_QRCODE
*&---------------------------------------------------------------------*
*&      Form  CONVERT_IMAGE
*&------------------