最近公司有个业务,需求是开发一个可以生成条形码PDF文档的小工具。另外,老板还要求能在五一前上线该工具,时间紧,任务重。正好最近ChatGPT正火爆,何不让他帮我实现这个工具呢?

二话不说,打开chatGPT的提问窗口,把我的需求告诉了他。很快啊,他不负众望,立马就给出了一套实现方案,把代码COPY到我的项目里,报了很多错,仔细一看,是没有引入相应的依赖,按照报错信息,在项目中添加了以下依赖:

  <!--A Free Java-PDF library--><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13.3</version></dependency>

刷新之后,依赖是有了,代码也不爆红了!写了个main方法测试一下,空指针异常,试了几次都是不行,于是我仔细检查报错地方的代码,发现ChatGPT生成的代码只是写了个大概,具体的逻辑还要自己根据具体情况去修改。看来ChatGPT还不太成熟!我还暂时失业不了~

经过一番折腾,代码能跑了。但生成的文件怎么那么难看,例如,
这样


这样

还有这样
反正就是位置不对。

后来在代码里发现几个控制位置和尺寸的参数,经过一番微调终于实现了自己想要的效果,如下图

到这里就算结束了。下面贴出实现的代码


import cn.hutool.core.text.StrBuilder;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.Barcode;
import com.itextpdf.text.pdf.Barcode128;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfWriter;
import lombok.extern.slf4j.Slf4j;import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;/*** @author Charles* @Date 2023-04-26*/
@Slf4j
public class BarcodeUtil {/*** 生成条形码** @param cb     PDF 内容字节* @param code   条码数据* @param width  条码宽度* @param height 条码高度* @return 条码图片* @throws DocumentException* @throws IOException*/public static Image generateBarcode(PdfContentByte cb, String code, float width, float height) throws DocumentException, IOException {//条形码编码类型可自定义,这里选用Code128Barcode128 barcode = new Barcode128();barcode.setCodeType(Barcode.CODE128);barcode.setCode(code);//设置替代文字barcode.setAltText("SN:" + code);Image img = barcode.createImageWithBarcode(cb, BaseColor.BLACK, BaseColor.BLACK);img.scaleAbsolute(width, height);return img;}/*** 批量生成条形码pdf文件** @param codes 条码数据* @param os    输出流* @throws IOException*/public static void generateBarcodePDF(List<String> codes, OutputStream os) throws IOException {Document document = null;try {document = new Document(new Rectangle(198F, 85F), 10, 2, 10, 2);PdfWriter writer = PdfWriter.getInstance(document, os);document.open();PdfContentByte cb = writer.getDirectContent();for (String code : codes) {document.newPage();document.add(BarcodeUtil.generateBarcode(cb, code, 180, 60));}os.flush();} catch (DocumentException e) {log.error("generateBarcodePDF 执行异常!", e);e.printStackTrace();} finally {if(Objects.nonNull(document)){document.close();}if (Objects.nonNull(os)) {os.close();}}}public static void main(String[] args) throws IOException {OutputStream os = new FileOutputStream("D:/下载/R.pdf");StrBuilder str = new StrBuilder();List<String> list = new ArrayList<>();for (int i = 30000001; i <= 30001000; i++) {list.add(str.append("R-").append(i).toStringAndReset());}generateBarcodePDF(list, os);}}

Java生成条形码PDF文件【可批量】相关推荐

  1. java itext 导出pdf文件_【Java,PDF】使用Itext实现PDF文件生成

    重要声明:本文章仅仅代表了作者个人对此观点的理解和表述.读者请查阅时持自己的意见进行讨论. 前言 有时候,业务系统要求提供一个PDF文件导出的功能,这时候我们就需要将数据库的对应数据查询出来,然后生成 ...

  2. java使用itext生成表格pdf文件

    以下主要讲解的是java使用itext生成表格pdf文件,话不多说,直接上代码 一.首先引入itext所使用的包 <dependency><groupId>com.itextp ...

  3. 如何将PDF如何存入MySQL_如何将生成的pdf文件保存到java中的mysql数据...

    我有一个使用itext库生成pdf文件的java类.现在根据我的需要,我必须将生成的pdf文件保存到mysql数据库表中,但是我不知道该怎么做. 我的担心是:- 1.我可以在pdf表的mysql列中提 ...

  4. java 字符串转pdf文件_java中根据模板生成pdf文件

    原标题:java中根据模板生成pdf文件 阅读目录 简介 业务需求 引入jar包 pdf模板文件与方法参数 代码部分 总结归纳 回到顶部 简介 本文使用java引入apach提供的pdf操作工具生成p ...

  5. Java 生成二维码 zxing生成二维码 条形码 服务端生成二维码 Java生成条形码

    Java 生成二维码 zxing生成二维码 条形码 服务端生成二维码 Java生成条形码 一.关于ZXing 1.ZXing是谷歌开源的支持二维码.条形码 等图形的生成类库:支持生成.和解码功能. G ...

  6. java删减pdf内容合并_[Java教程]Java基础之PDF文件的合并

    [Java教程]Java基础之PDF文件的合并 0 2017-07-28 00:00:45 1.首先下载一个jar包:pdfbox-app-1.7.1.jar 2.代码如下:package com;i ...

  7. java实现对pdf文件压缩,拆分,修改水印,添加水印

    最近要实现一个文件上传,并且在线预览上传文件的功能,设计思路是:把上传的文件通过openoffice转成pdf文件,并将pdf文件以流的形式返回到浏览器,由于上传的部分文件过大,转成pdf后传回前端浏 ...

  8. java实现给PDF文件添加图片水印,java实现给PDF文件添加文字水印

    接上一篇,pdf跟tif 是一起做的 java实现 1.给PDF文件添加图片水印: public static void waterMark1(String inputFile,String outp ...

  9. JAVA生成行程单PDF

    JAVA生成行程单PDF 一.pom依赖 首先引入PDF需要的pom依赖 <!-- pdf--><dependency><groupId>com.itextpdf& ...

最新文章

  1. 知识点回顾-简单的TableView单组数据展示/多组数据展示
  2. 记一次接收微信公众平台推送消息的实例
  3. boost::math::tools::sum_series用法的测试程序
  4. VTK:Points之CompareExtractSurface
  5. 初学linux,在Linux上创建c程序并运行!
  6. 无法打开虚拟机,获取该虚拟机的所有权失败。 主机上的某个应用程序正在使用该虚拟机。
  7. 从服务器检索时出错dfdferh01_大数据实战项目之海量人脸特征检索解决方案演进...
  8. UVA - 400 Unix ls
  9. 《HTML5游戏编程核心技术与实战》——2.5 绘制文字
  10. Web实践小项目(仅供参考)
  11. atitit.设计模式(2) -----查表模式/ command 总结
  12. 电脑html动态桌面壁纸制作,动态桌面软件《Wallpaper Engine》 让你的电脑桌面动起来!...
  13. 网络端口扫描器程序设计
  14. winpe加载raid_winpe集成raid驱动~
  15. 互联网江湖野史 - 氪金玩家
  16. Marlin固件运动控制代码分析
  17. python什么意思g_python字符串%%g的格式是什么?
  18. pandas以文本形式读取Excel表数据写法
  19. Quixel bridge无法导入到blender
  20. 算法之路,带你轻松学废算法系列之哈希表

热门文章

  1. 超简单的C++去重、排序
  2. 【亚稳态、建立时间和保持时间】亚稳态的产生原因、危害及解决方法
  3. 散户跟庄有哪些应用要点?我们一起来看看
  4. 花生日记,购物省钱还能赚钱,淘宝天猫优惠券一网打尽!2018,你还打算将错就错继续做微商吗?...
  5. 二叉树中的结点数目确定时,高度最小的一定是完全二叉树?
  6. 资料:高等数学学习笔记——高等数学(四)学习笔记汇总
  7. 游戏海报——快手2019校招真题——笔试编程C/C++
  8. 让人混淆的Person p=new Person();和Person p=null;
  9. 解决SPI OLED屏驱动(SEPS525)开发过程中全屏刷新慢的问题
  10. [RK3288][Android6.0] WiFi的dts配置说明(AP6335)