用itext生成指定宽和动态高的二维码图片

2023-10-31

    标题和摘要中都提到,本文的一个目的就是生成定宽的二维码图片(还有一个很特别的要求,打印出来得图片需要被条码枪识别),用的第三方工具类库是itext,版本是2.0。

    为了实现二维码的指定宽高,我的第一个想法是“先用itext生成图片,然后通过缩放或者剪裁来指定图片的宽高”,代码可以参考 http://my.oschina.net/psuyun/blog/228908 ,这种做法,达到了生成指定宽高的效果,让人遗憾的一点是,用此法打印出来的二维码不能被条码枪识别,无奈之下,只能寻求他法。

    其实针对第一个想法的失败,我一直有个担心是,生成的图片dpi不够,这个说法可以参考http://blog.csdn.net/chenweionline/article/details/2026855 

    回到正题,这次我的思路是研究itext的源码,看看是怎么生成图片的,很遗憾,这次让我成功了。下面给出关键代码和说明(有兴趣的同学,可以去研究下他的源码):

//BarcodePDF417 为itext中生成二维码图片的工具类
  BarcodePDF417 barcodePDF417 = new BarcodePDF417();
  
  //下面两行很重要,用于定宽
  barcodePDF417.setOptions(BarcodePDF417.PDF417_FIXED_COLUMNS);
  
  //设置codeColumns,主要用于指定生成二维码图片的长度,他的计算公式为: (17 * codeColumns +3)+ 18,得到的这个值,正是二维码图片的宽度,公文二维码的宽度一般是188,所以我的codeColumns=7 
  barcodePDF417.setCodeColumns(7);
  
  //下面两行动态决定二维码图片的高度,分别说明如下:
  //1、setText方法用于设置二维码图片的内容,也是动态高的由来,因为图片保存的内容有多有少(有上限,string.length < 926, 一个大概值 ),相对 codeColumns,还有一个概念 codeRows,codeRows跟二维码的高度有关系。
  //关于codeRows值的计算,codeRows = (tot - 1) / codeColumns + 1; 这行代码能给我们一个说法,codeRows跟tot 和 codeColumns 有关系,其中tot的重要组成部分就是二维码的内容也就是setText的值,内容越多,codeRows就会大一些
  //所以说二维码的高其实是一个动态的高
  //2、再来看看yHeight这个东西有什么用
  //int h = (int)yHeight;
  //java.awt.Image img = canvas.createImage(new MemoryImageSource(bitColumns, codeRows * h, pix, 0, bitColumns));
  //对于二维码图片的高,相信不用我在多说了,额外补充一点,bitColumns其实就是188
  barcodePDF417.setText(strInfo.getBytes());
  barcodePDF417.setYHeight(2);
  
  //生成图片
  Image pdfImg = barcodePDF417.createAwtImage(Color.black, Color.white);

相关的说明,在示例代码中都有说明了,还有什么不清楚,可以找到我的qq进行交流。

好在功夫不负有心人,这个问题就这么OK了。

转载于:https://my.oschina.net/psuyun/blog/262640

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用itext生成指定宽和动态高的二维码图片 的相关文章

随机推荐

  • Linux操作系统简介

    文章目录 Linux发行版简介 学习Linux的必备硬件知识 关键硬件器件 CPU 关键硬件器件 存储 关键硬件器件 内存 其他一些查看硬件信息的命令 Linux开机过程 以Ubuntu16 04为例 阶段1 BIOS 阶段2 boot L
  • 技术人修炼之道阅读笔记(一)让自己更值钱的5个能力

    如何让自己更值钱 回答这个问题 需要使用黄金圈理论 黄金圈理论是一种由内而外的思维模式 提倡 why 为什么这么做 how 如何做 what 做什么 三个圈来思考或决策 首先是 why 你因为什么而值钱 要值钱 就要时刻保持稀缺性 别人不会
  • Python网络爬虫学习笔记(四)解析库的使用

    解析库的使用 使用正则表达式 比较烦琐 而且万一有地方写错了 可能导致匹配失败 对于网页的节点来说 有 id class 或其他属性 而且节点之间还有层次关系 在网页中可以通过 XPath 或 css 选择器来定位一个或多个节点 利用 XP
  • Halcon Qt 环境一次性配置

    新建 halcon pri文件 halcon pri 内容 INCLUDEPATH C Program Files MVTec HALCON 20 11 Steady include INCLUDEPATH C Program Files
  • 六、操作系统之文件管理

    六 文件管理 文件系统的概念 文件系统时OS与用户关系最紧密的一部分 对用户来说 它是OS中最直观的部分 能否方便使用OS 以及OS的可信赖程度往往取决于文件系统的功能和性能 1 文件和文件系统 2 文件系统的功能 3
  • 18 回文字符串 (后续用动态规划再做一下)

    题目 思路 题解 方法1 思路都在代码里了 class Solution public int countSubstrings string s 每个值都作为中心值 左右两个指针 但是要考虑奇偶的情况bb 和 aba gt i前面的字符串是
  • sql_mode设置(临时or永久)

    临时和永久设置MySQL sql mode非容器方式和容器方式 MySQL 文章目录 临时和永久设置MySQL sql mode 前言 查看sql mode 临时修改sql mode 永久修改sql mode 永久修改sql mode 容器
  • 工业操作系统不是ARM吗?鸿蒙是

    未来工厂如何建 工厂要怎样的数字化平台 褚健认为 面向未来的数字化工厂建议 需要走一条大规模 低成本 生态化之路 正如移动互联时代需要安卓 iOS APP 智能工厂时代需要工厂操作系统 工业APP 工厂操作系统的基础理念包括统一的数据底座
  • ykhmi是什么触摸屏软件_一体机使用中常见问题-中达优控

    1 一体机的屏在组态软件中选择的型号 4 3寸一体机选S430A 5寸一体机选S500A 7寸一体机选S700A 10寸一体机选S1001A 2 一体机发脉冲的Y点用法 A 步进电机驱动器 伺服电机驱动器可以直接接 B 可以用来驱动指示灯
  • Java程序员不得不会的124道面试题(含答案)

    专注于编程 互联网动态 最终将总结的技术 心得 经验 数据结构与算法 源码分析等 享给大家 这里不只限于技术 还有职场心得 生活感悟 以及面经 点击上方 关注按钮 第一时间送达 多线程 并发及线程的基础问题 1 Java 中能创建 vola
  • Chandy-Lamport快照算法仿真实现

    Chandy Lamport快照算法仿真实现 分布式系统中存在的问题 在简单的非分布式环境中发现的问题 如互斥 饿死和死锁等 它们都有可能出现在分布式环境中 实际上 后一种环境下出现这些问题的可能性更大 因为它涉及到很多的实体 它们会引起混
  • 《Java基础教程案例》读书心得

    建议新入门的Java程序猿观看 书籍里面共包含 11 章内容 涵盖了Java基础的全部知识 配备了 20 个任务案例 22到思考题 这本书在我读完以后觉得还是挺不错的一本书 每章的知识点讲的还是挺详细的 最主要的还是你学过此章节的知识点后
  • 传统制造业进行转型过程当中所要面临的主要难点

    在历史上 人类经历了四次工业革命 每一次工业革命都会伴随着一个标志性事物的出现 比如蒸汽机 这标志着人类进入了蒸汽时代 这也是第一次工业革命的开始 第二次工业革命以电力的出现为代表 标志着人类进入了电力时代 以计算机的出现为代表的第三次工业
  • 使用 Kotlin Compose Desktop 实现了一个简易的"手机助手"

    1一 adbd connector adbd connector 是一个实现 adb server 和 adb daemon 之间的通信协议的库 使用 Kotlin 编写 支持 PC 端直接连接 Android 设备操作 adb 相关的指令
  • Vue命令行终端插件使用——vue-web-terminal

    今天分享一个用Vue写的网页端终端插件 可以在web页面模拟原生命令行终端实现一些高级的操作 插件地址 https github com tzfun vue web terminal npm地址 https www npmjs com pa
  • echarts两个饼图关联

    需求一开始显示两张饼图 第一张是各罪名数量的饼图 第二张是嫌疑人各文化数量的饼图 显示之后 要求点击第一个饼图的某个罪名 第二张饼图显示该罪名嫌疑人各文化数量的饼图 给第一张饼图绑定点击事件 默认传入params参数 会输出你点击的这个饼图
  • 代码启动流程

    1 新建Vue项目 vue create app 2 运行项目 yann serve 3 安装electron插件 vue add vue cli plugin electron builder 选择Electron版本 这里需要等很久 请
  • QT实现浏览器访问网页,使用QWebEngineView,支持播放mp4

    QT实现浏览器访问网页 使用QWebEngineView 支持播放mp4 参考 https blog csdn net weixin 40355471 article details 120698537 增加了调试和播放mp4的功能 屏幕放
  • moment.js

    将时间戳转换为number moment Number date format
  • 用itext生成指定宽和动态高的二维码图片

    为什么80 的码农都做不了架构师 gt gt gt 标题和摘要中都提到 本文的一个目的就是生成定宽的二维码图片 还有一个很特别的要求 打印出来得图片需要被条码枪识别 用的第三方工具类库是itext 版本是2 0 为了实现二维码的指定宽高 我