SAP二维码固定大小

引言

ABAP SMARTFORMS打印二维码步骤参照此链接
如果读者使用SAP内置的QECODE2005,遇到了因二维码内容变化而导致二维码大小变化的问题,这篇博客提供的方法仅供参考,如果有更好的方法欢迎留言补充。

解决方案

我的做法是首先计算出二维码所放置内容的最大字符长度,如果当前所需放置长度不足最大字符长度,则使用空格补全至最大长度。
也就是说,如果我需要输出二维码的字符长度有:20,10,30,25,那么最大字符长度就是30,其余不满足条件的用空格补足至30。
之所以用空格而不用别的字符,是因为扫描二维码时只有空格在以下情况下会被忽略

  • 如果有10个空格在其他字符的最前面或者最后面,这10个空格会被忽略而无法被扫描出
  • 如果空格在中间,那么这10个空格只会被扫描出1个

所以我们使用空格在输出字符的最前面或者最后面的方法是可行的,但是SAP系统是不能在字符后面加空格的(我试了很多方法都不行,只能在两个字符中间或者字符前面),所以我在输出字符的最前面补足了空格,以达到控制二维码内容长度的目的。

问题示例

这是我最开始没有用空格补足至72个字符长度的效果,可以看到两个二维码大小是不一致的。
第一个二维码字符长度是31(D3#2000000000004/A4002021060010)
第二个二维码字符长度是18(D3#3000000000003/1)

解决代码

现在使用如下代码对字符进行空格补全

DATA lv_len TYPE I.
DATA: LV_SERNR LIKE GS_DATA-SERNR,
      LV_MATNR LIKE GS_DATA-MATNR.
* 如果有前导零,会影响strlen的计数长度,要清空前导零,这里因为太占篇幅就没有加上

*计算当前输出内容总长度
  lv_len = strlen( LV_MATNR ).
  lv_len = lv_len + strlen( LV_SERNR ).

*拼接最后二维码输出的内容
  gv_data = 'D3#' && LV_MATNR && '/' && LV_SERNR.

*我的情况下最多字符数=前缀+序列号+ '/ '+物料号 = 3 + 18 + 1 + 40 = 72
  DO ( 72 - lv_len - 4 ) TIMES.
	"在字符最前面加空格补全至最大长度,string和char用以下方法都可以加空格
    CONCATENATE '' gv_data INTO gv_data SEPARATED BY ' '.
  ENDDO.

此时再在smartforms输出后的效果如下,可以看见两个二维码扫描出来的内容长度是不一致的,但二维码大小是相同的


后记------二维码宽高和位置问题

至此,二维码固定大小的问题得到了解决,但是此时还有两个问题就是二维码的宽高没办法设置定值,而且二维码的位置也很奇怪。

二维码宽高问题

二维码宽高无法被直接设置成定值(我到处都找遍了也没找到设置的方法,如果有请评论区留言分享),所以我只能用以下的方法进行估算宽高,这一步的前提是你的二维码内容长度已经固定了
二维码的宽高可以通过SE73的系统条形码中二维码的Modsize和Corrlev(容错级别,二维码产生部分污损,仍能被扫描出来的级别,级别越高二维码越复杂)两个属性共同控制大小,建议多改动尝试,找到一个合适的大小,可以在smartforms里画一个定长的正方形,进行比对。
Tips:如果容错级别设置成H,最严格的那一种,那么ModSize不宜太小,否则可能无法被扫描设备(如手机)扫描出来,如果ModeSize一定要设置的小一些,那么就选择低级别的容错级别

二维码位置问题

这个位置也很难设置,像之前所展示的图片中所示,二维码到处跑,就不在我们给他塞的窗口里面,这一步的操作建议先完成上两步
如果要修改他的位置,可以在smartforms的style当中,修改段落格式的左右边距和行间距,慢慢调整至合适的效果

这是最后的成品图,孩子已经很努力的在调整了,给我点个赞再走吧qaq

  • 15
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值