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 = 72DO ( 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
總結
以上是生活随笔為你收集整理的SAP二维码固定大小的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 上市前又一次资本动作:阿里全面收购UC优
- 下一篇: XPCIE1032 — 高速高精,超快交