使用 ABAP 生成和解析二维码
大家感兴趣可以试试,大概率 ChatGPT 无法完成,因为 qrcode-reader 的实现源代码里,还使用了其他的开源库,如果不递归地将这些开源库的源代码全部提供给 ChatGPT,它大概率会偷懒,只复刻一个空壳出来。下面二十多行 ABAP 代码,封装了使用 CL_HTTP_CLIENT 将要生成二维码的字符串,通过 HTTP 请求发送给在线服务,并将包含二维码的图片数据,返回到 ABAP 端
有个朋友咨询我文章标题这个需求。
笔者五年前就写过相关主题的文章。
首先说二维码的生成,ABAP 提供了丰富的工具。
方法1:利用 Adobe Form Template 的标准控件
ABAP 系统事务码 SFP 可以创建 Adobe Form Template,其中提供了标准的二维码(QR Code)控件:

把这个二维码的数据源,绑定到一个类型为 STRING 的 ABAP Form Interface 的字段上:

然后将用户指定要用来生成二维码的字符串内容,通过 ABAP Form Interface,传递到 Adobe Form Template 即可。通过数据绑定机制,在 Adobe Form 运行时生成 PDF 时,显示出的二维码,自然就嵌入了用户传递进来的字符串值。

这种方式的完整源代码和详细步骤,笔者已经发布到我的 ABAP 开发教程里了:

方法2:利用 ABAP Webdynpro 渲染二维码
这种方式的思路同方法一类似,都使用 Adobe Form Template 的二维码控件。
区别在于:
-
方法1 需要开发人员手动编写 ABAP 代码,在 SAPGUI 里渲染并生成包含二维码的 PDF.
-
方法2 不需要 ABAP 编程工作,而仅仅是在 ABAP Webdynpro 里使用标准的 Interactive Form 控件,在这个控件里将我们在 SFP 事务码里制作好的包含了二维码的 Adobe Form Template 维护进去,如下图所示:

用户最终在浏览器打开 ABAP Webdynpro,包含二维码的 PDF,由 ABAP Webdynpro 完成渲染,无需开发人员手动干预。
最后的效果如下:

方法2的详细步骤,笔者早在 2014 年就发布在 SAP 社区上了:
https://community.sap.com/t5/application-development-and-automation-blog-posts/step-by-step-to-create-qrcode-in-abap-webdynpro/ba-p/13075353
方法3:利用各种在线二维码生成服务提供的 HTTP API
所谓专业的人做专业的事。如果不想让二维码的生成方案依赖于 Adobe Form Template,可以把生成二维码的任务,交给各种专门生成二维码的在线服务。
下面二十多行 ABAP 代码,封装了使用 CL_HTTP_CLIENT 将要生成二维码的字符串,通过 HTTP 请求发送给在线服务,并将包含二维码的图片数据,返回到 ABAP 端的功能。

在 ABAP 里如何通过 HTTP 协议进行文件传输,从最简单的文本文件到 Excel,PDF 等二进制文件,笔者之前的文章都介绍过技术实现细节:
ABAP 解析二维码中的文本内容
对于这个需求,笔者的意见仍然和之前回答另一个朋友的类似需求一致:ABAP 真的是完成这类需求的最佳选择吗?
如何使用 ABAP 将本地 PDF 文件中的文本内容提取出来?
如果笔者被分派这个开发任务,笔者会建议用 Python 或者 Node.js 实现二维码的内容解析,然后把解析功能暴露成 HTTP 服务。ABAP 端通过 CL_HTTP_CLIENT, 消费 HTTP 服务,从 HTTP 服务处取得解析结果。
直接让 ChatGPT 给我写一个用 Node.js 解析二维码的程序,几秒钟就写好了,包含能够直接运行的源代码和原理说明。

ChatGPT 建议使用 Jimp 来读取图片文件内容,用 qrcode-reader 来进行二维码解析。Node.js 生态圈的轮子太多了,我们采用拿来主义,不重复造轮子。

ChatGPT 给出的源代码,稍稍改改就能用。

测试一下,比如下面这张笔者知识星球的二维码:

使用 ChatGPT 提供的15 行 Node.js 代码,轻松将里面包含的网址提取出来。
将这段 Node.js 代码通过 Express Server 以 HTTP 的方式暴露出来,部署在本地,就可以通过 ABAP 的 CL_HTTP_CLIENT 去消费了。

当然大家也可以按照我之前文章「如何使用 ABAP 将本地 PDF 文件中的文本内容提取出来」提到的方法,把 qrcode-reader 的源代码喂给 ChatGPT,让其用 ABAP 重写一遍。大家感兴趣可以试试,大概率 ChatGPT 无法完成,因为 qrcode-reader 的实现源代码里,还使用了其他的开源库,如果不递归地将这些开源库的源代码全部提供给 ChatGPT,它大概率会偷懒,只复刻一个空壳出来。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)