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.