Java 如何生成 PDF

打开电脑,我们几乎每天都在和PDF打交道——不管是公司的报销单、孩子的成绩单,还是网上下载的资料,大多都是这种格式。你有没有想过,这些规整的PDF文件,在程序员手里是怎么“变”出来的?今天就用最接地气的话,讲讲Java生成PDF这件事。

最常用的工具:像“搭积木”一样的PDF库

Java本身没有直接生成PDF的功能,得靠第三方工具,就像我们做PPT要靠Office一样。目前用得最多的是两个“搭积木”的工具,选哪个全看需求。

Java 如何生成 PDF

第一个是iText,它就像一套精细的积木,能控制每一个角落:你想让标题居中,正文用小四号字,表格的边框加粗,甚至在某个角落加个小水印,它都能做到。比如你要生成一份公司的员工工资单,每个员工的姓名、工资金额、扣款项都不一样,用iText可以把固定的格式(比如表头的“姓名”“实发金额”)和动态的员工数据分开,批量生成几十份也不会乱。不过它有个小提醒:如果是商业项目用,得注意它的开源协议,避免侵权麻烦。

另一个是Apache PDFBox,它更像个“实用工具箱”,功能和iText差不多,但更轻量,而且是纯开源免费的,没有商业使用的限制。比如你给学校做学生成绩统计的小工具,不需要特别复杂的格式,只要把名字、分数列清楚,用PDFBox上手更快,代码也更简单,适合新手试试手。

一步步做个小例子:生成一份“购物清单PDF”

光说工具太抽象,我们用一个简单的购物清单来演示,看完你就知道原理了。

第一步,先把工具“请”进项目里。如果你用的是Maven项目,只要在配置文件里加几行代码,就能自动下载需要的文件,就像从应用商店装APP一样。比如用PDFBox的话,只要加一段依赖配置,不用手动找安装包。

第二步,准备内容。先想好购物清单要什么:标题“周末购物清单”,下面分两行,一行是买的东西(牛奶、鸡蛋、苹果),一行是预计金额(30元、15元、20元)。这些内容可以是固定的,也可以从数据库里拿,比如你做一个小程序,把用户选的商品存到数据库,生成PDF的时候直接读数据就行。

第三步,把内容“拼”成PDF。用代码的话,就是先创建一个空白的PDF文档,然后在指定位置写上文字——标题放在页面中间,文字按行排列。举个生活化的例子,这就像你在白纸上先写好标题,再一行一行抄要买的东西,最后把纸保存成PDF文件。

可能有人会问,要是想加个表格或者图片怎么办?其实和写文字差不多,只要告诉工具“这里画个表格,列宽10厘米”“这里插一张超市logo的小图”就行。就像你在手写清单的时候,画个框把商品和金额对应起来,再贴个超市的小贴纸,操作逻辑是一样的。

容易踩的小坑:别让PDF变“乱码”

虽然做起来不难,但有两个新手常踩的坑。一个是字体问题,如果你用了特殊字体,比如楷体、微软雅黑,要是工具没把字体打包进去,生成的PDF打开后字就会变成方块。解决办法很简单,要么用PDF自带的默认字体,要么把字体文件和代码一起打包,就像你给朋友发照片的时候,把原文件一起发,避免对方打不开。另一个是编码,要是有中文内容,别乱改字符设置,用工具默认的UTF-8格式就行,不然中文就会变成看不懂的乱码。

现在你应该明白,Java生成PDF不是什么神秘的技术,就是用现成的工具,把你需要的内容整理成PDF的格式。不管是给公司做报表,还是给朋友做个小礼品清单,只要选对工具,跟着步骤来,就能轻松搞定。

上一篇 Swift语言特性解析 从基础语法到实际应用的知识科普