Smartforms打印固定大小二维码

本文介绍了如何在Smartforms中控制二维码尺寸,通过填充空格调整有效字符长度,处理超过255字符的变量,并避开SAP内核生成器的性能瓶颈。详细步骤包括定义二维码模式、样式和使用SO10合并变量。
摘要由CSDN通过智能技术生成

众所周知,Smartforms打印QR二维码的大小跟打印内容和Module Size有关,在Module Size固定的前提下,二维码包含的内容越多,二维码尺寸就越大,有时候为了排版美观,想让Smartforms打印的二维码不论内容多少二维码一样大小,应该怎么做呢?

二维码在扫描的时候会忽略前面所有的空格,根据这个特性,我们可以在打印内容前面补充空格,达到有效字符不变而二维码尺寸变大的效果。

又因为Smartforms传递变量的最大长度为255,所以如果打印内容如果超过255,则需要多个变量来传值,使用SO10创建的文本把多个变量合并到一起。SAP内核使用的QR二维码生成器有个BUG,在长度超过1000左右字符的时候,性能会极度变差,基本就打印不出来了,所以打印内容最好是限制在1000以内,这样使用4个变量就可以传递1000长度了。

具体做法如下:

首先SE73定义二维码,Mode设置为U,其他两个可以默认或者根据实际情况更改。
091f6e6eaa9ee457a44dc2e9317939a8.png

定义Style,利用Left Margin和Space Before来精确定义二维码位置,这个值可能需要多次调试才能做到位置合适。
7a5ced946f4b8e5d47c43a8e74e44ae8.png

5d5baa485ee9a6844d93d4faedc02cae.png

事务码SO10定义文本a8b2f90c417821fb2c89f738b54f0743.png

Smartforms定义如下f05f137f161614cd4976cc1093caae0a.png

f205a59fec76cc1c8eb4b7a7bd3c2d82.png

a2efc65a465406864861a08b629735e6.png

94201e5a8143ad2d773025e7a97f430d.png

4112fb3f71539329323d8141b80640da.png

FORM split_qrstr USING VALUE(pv_qrstr) pv_qrlen
                 CHANGING qr01 qr02 qr03 qr04.
  DATA: lv_xlen TYPE i,
        lv_xstr TYPE xstring.


  CHECK pv_qrstr NE ''.
  CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
    EXPORTING
      text     = pv_qrstr
      encoding = '4110'
    IMPORTING
      buffer   = lv_xstr
    EXCEPTIONS
      failed   = 1
      OTHERS   = 2.
  lv_xlen = xstrlen( lv_xstr ).


  DO pv_qrlen - lv_xlen TIMES.
    pv_qrstr = ` ` && pv_qrstr.
  ENDDO.


  qr01 = pv_qrstr.
  IF qr01 = ''.
    qr01+247 = '\BIN:20\'.
    SHIFT pv_qrstr BY 248 PLACES.
  ELSE.
    SHIFT pv_qrstr BY 255 PLACES.
  ENDIF.


  IF pv_qrstr IS NOT INITIAL.
    qr02 = pv_qrstr.
    IF qr02 = ''.
      qr02+247 = '\BIN:20\'.
      SHIFT pv_qrstr BY 248 PLACES.
    ELSE.
      SHIFT pv_qrstr BY 255 PLACES.
    ENDIF.
  ENDIF.
  IF pv_qrstr IS NOT INITIAL.
    qr03 = pv_qrstr.
    IF qr03 = ''.
      qr03+247 = '\BIN:20\'.
      SHIFT pv_qrstr BY 248 PLACES.
    ELSE.
      SHIFT pv_qrstr BY 255 PLACES.
    ENDIF.
  ENDIF.
  IF pv_qrstr IS NOT INITIAL.
    qr04 = pv_qrstr.
    IF qr04 = ''.
      qr04+247 = '\BIN:20\'.
    ENDIF.
  ENDIF.
ENDFORM.

打印测试程序:

PARAMETERS p_str TYPE string.
PARAMETERS p_len TYPE i.


AT SELECTION-SCREEN OUTPUT.
  %_p_str_%_app_%-text = '打印内容'.
  %_p_len_%_app_%-text = '最小长度'.


  CALL FUNCTION '/1BCDWB/SF00000012'
    EXPORTING
      qrstr = p_str
      qrlen = p_len.

效果:

144f70e2d7fb0504e029593ed7518404.png

5bf26a051551a35999be6c8e43510152.png

打印内容改长:

98404866120035f8af3b0b65b938e17a.png

fe4d5c38575d1a9093cc186ce382ce79.png

完美实现!

4f4431da1adba5ff69a4f1083db0fe07.jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值