SAP二维码 ABAP二维码 ABAP代码生成二维码 QR Code or 2D Bar Code

Implement SAP Note 2029824
2029824 – Support for QR code and data matrix bar code

Go to Transaction SE73.
SAP Script Font Maintenance
事务码 SE73
SAPscript 字体维护

Click on System Bar Code option and Click on Change.在这里插入图片描述
Click on Create(F5).
在这里插入图片描述
Click on New (new Barcode Technology)
在这里插入图片描述
Define the Name and Description of the Bar code.
在这里插入图片描述
Select Bar Code Symbology as “QR Code 2005” and Click OK. Select Alignment as “Normal”
在这里插入图片描述
Choose Mode, Module Size, Error Correction Level (Refer the SAP note 2030263 for further information)
Mode:
A – AUTOMATIC
N – NUMERIC
L – ALPHANUMERIC
B – BYTE_LATIN1
K – KANJI
U – BYTE_UTF8
1 – FNC1_POS1 (FNC1 in first position)
2 – FNC1_POS2 (FNC1 in second position)

Module Size: Numeric User Entry

Error Correction Level:
L – 7 % Error Correction capability
M – 15% Error Correction capability
Q – 25% Error Correction capability
H – 30% Error Correction capability在这里插入图片描述
Save the Bar Code Definition. Select the same and Test.
在这里插入图片描述

Step 4: Create Program to Download the QR Code as BMP (image File)

FUNCTION zfi_qrcode_download_bmp .
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     REFERENCE(IV_BARCODE) TYPE  TDBARCODE DEFAULT 'ZQRCODE'
*"     REFERENCE(IV_BARCDATA) TYPE  CHAR255 DEFAULT '1234567890'
*"     REFERENCE(LV_FILEPATH) TYPE  STRING
*"  EXPORTING
*"     REFERENCE(EV_RC)
*"     REFERENCE(EV_ERRORMSG) TYPE  CHAR255
*"----------------------------------------------------------------------
*&-----------------------------------------------------------------*
*& 描述     : 生成二维码保存为BMP格式图片
*&------------------------------------------------------------------*
  DATA: lw_bc_cmd           TYPE itcoo,
        lw_bp_cmd           TYPE itcoo,
        lv_bitmapsize       TYPE i,
        lv_bitmap_bmp_size  TYPE i,
        lv_bitmap_bds_size  TYPE i,
        lv_w                TYPE i,
        lv_h                TYPE i,
        lt_bitmap           LIKE rspolpbi OCCURS 10 WITH HEADER LINE,
        lt_bitmap_bmp       LIKE rspolpbi OCCURS 10 WITH HEADER LINE,
        lt_bitmap_bds       TYPE sbdst_content,
        lt_otf              LIKE itcoo OCCURS 10 WITH HEADER LINE,
        lv_length           TYPE i,
        lv_hex              TYPE xstring,
        lv_buffer_xstring   TYPE xstring,
        lv_filepath_temp    TYPE string.
  FIELD-SYMBOLS: <ls_x> TYPE x.

  PERFORM get_otf_bc_cmd IN PROGRAM sapmssco USING iv_barcode iv_barcdata lw_bc_cmd.
  ev_rc = sy-subrc.
  CHECK ev_rc = 0.
  lw_bp_cmd-tdprintcom = 'BP'.
  PERFORM get_otf_bp_cmd IN PROGRAM sapmssco USING iv_barcode lw_bp_cmd-tdprintpar.
  ev_rc = sy-subrc.
  CHECK ev_rc = 0.
  PERFORM renderbarcode IN PROGRAM sapmssco TABLES lt_bitmap
                        USING lw_bc_cmd lw_bp_cmd iv_barcdata lv_bitmapsize lv_w lv_h ev_errormsg.
  ev_rc = sy-subrc.
  CHECK ev_rc = 0.
  PERFORM bitmap2otf IN PROGRAM sapmssco TABLES lt_bitmap lt_otf USING lv_bitmapsize lv_w lv_h.
  CLEAR: lt_bitmap, lt_bitmap[], lv_w, lv_h, lw_bc_cmd, lw_bp_cmd, lv_bitmapsize.
  LOOP AT lt_otf.
    lv_length = lt_otf-tdprintpar+2(2).
    ASSIGN lt_otf-tdprintpar+4(lv_length) TO <ls_x> CASTING.
    lv_hex = <ls_x>(lv_length).
    CONCATENATE lv_buffer_xstring lv_hex INTO lv_buffer_xstring IN BYTE MODE.
    CLEAR: lv_length, lv_hex.
  ENDLOOP.
  CLEAR: lt_otf, lt_otf[].

* convert from old format to new format
  lv_hex = 'FFFFFFFF01010000'.
  CONCATENATE lv_buffer_xstring(8) lv_hex lv_buffer_xstring+8 INTO lv_buffer_xstring IN BYTE MODE.

  CLEAR: lv_hex.
  SHIFT lv_hex RIGHT BY 90 PLACES IN BYTE MODE.
  CONCATENATE lv_buffer_xstring(42) lv_hex lv_buffer_xstring+42 INTO lv_buffer_xstring IN BYTE MODE.
  CLEAR: lv_hex.

  CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
    EXPORTING
      buffer     = lv_buffer_xstring
    TABLES
      binary_tab = lt_bitmap_bds.

  lv_bitmap_bds_size = xstrlen( lv_buffer_xstring ).
  CLEAR: lv_buffer_xstring.

  CALL FUNCTION 'SAPSCRIPT_CONVERT_BITMAP'
    EXPORTING
      old_format               = 'BDS'
      new_format               = 'BMP'
      bitmap_file_bytecount_in = lv_bitmap_bds_size
    IMPORTING
      bitmap_file_bytecount    = lv_bitmap_bmp_size
    TABLES
      bitmap_file              = lt_bitmap_bmp
      bds_bitmap_file          = lt_bitmap_bds
    EXCEPTIONS
      no_bitmap_file           = 1
      format_not_supported     = 2
      bitmap_file_not_type_x   = 3
      no_bmp_file              = 4
      bmperr_invalid_format    = 5
      bmperr_no_colortable     = 6
      bmperr_unsup_compression = 7
      bmperr_corrupt_rle_data  = 8
      bmperr_eof               = 9
      bdserr_invalid_format    = 10
      bdserr_eof               = 11.
  IF sy-subrc <> 0.
    ev_rc = sy-subrc.
  ENDIF.
  CHECK ev_rc = 0.
  IF lv_filepath IS INITIAL.
    CALL METHOD cl_gui_frontend_services=>get_sapgui_workdir
      CHANGING
        sapworkdir            = lv_filepath_temp
      EXCEPTIONS
        get_sapworkdir_failed = 1
        cntl_error            = 2
        error_no_gui          = 3
        not_supported_by_gui  = 4
        OTHERS                = 5.
    IF sy-subrc <> 0.
      ev_rc = sy-subrc.
    ENDIF.
    lv_filepath_temp = lv_filepath_temp && '\' && iv_barcdata && '.BMP'.
  ELSE.
    lv_filepath_temp = lv_filepath.
  ENDIF.
  CHECK ev_rc = 0.
  CALL METHOD cl_gui_frontend_services=>gui_download
    EXPORTING
      bin_filesize            = lv_bitmap_bmp_size
      filename                = lv_filepath_temp
      filetype                = 'BIN'
      confirm_overwrite       = abap_true
      no_auth_check           = abap_true
    CHANGING
      data_tab                = lt_bitmap_bmp[]
    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
      not_supported_by_gui    = 22
      error_no_gui            = 23
      OTHERS                  = 24.
  IF sy-subrc <> 0.
    ev_rc = sy-subrc.
  ENDIF.
  CLEAR: lv_bitmap_bds_size, lv_bitmap_bmp_size, lv_filepath_temp,
         lt_bitmap_bmp, lt_bitmap_bds, lt_bitmap_bmp[], lt_bitmap_bds[].
ENDFUNCTION.
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

令狐九剑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值