Java 生成 PDF 文档 如此简单

server/2025/1/31 17:17:19/

嘿,朋友!在 Java 里实现 PDF 文档生成那可真是个挺有意思的事儿,今儿个就来好好唠唠这个。咱有不少好用的库可以选择,下面就给你详细讲讲其中两个超实用的库,一个是 iText,另一个是 Apache PDFBox。

用 iText 库生成 PDF

思路
  1. 先把 iText 库给引入进来,这就好比给咱的 Java 项目装上了一个生成 PDF 的“神器”。

  2. 创建一个 Document 对象,这个对象就像是一张白纸,咱要在上面绘制 PDF 的内容。

  3. 把这张“白纸”打开,同时设置好字体啥的,就像准备好画笔和颜料。

  4. Document 里添加各种内容,比如段落、表格这些,就像在白纸上画画。

  5. 最后把“白纸”合上,PDF 就生成啦。

代码示例

java">import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;public class ITextPdfGenerator {public static void main(String[] args) {// 创建 Document 对象,就像准备好一张白纸Document document = new Document();try {// 把这张“白纸”和一个文件输出流关联起来,指定生成的 PDF 文件路径PdfWriter.getInstance(document, new FileOutputStream("itext_example.pdf"));// 打开这张“白纸”,准备画画document.open();// 在“白纸”上添加一个段落内容document.add(new Paragraph("嘿,这是用 iText 生成的 PDF 文档哦,是不是很神奇!"));} catch (DocumentException | FileNotFoundException e) {e.printStackTrace();} finally {// 合上“白纸”,完成 PDF 生成if (document.isOpen()) {document.close();}}}
}
代码解释及使用说明
  • 首先咱创建了一个 Document 对象,它就代表了整个 PDF 文档,就像一张白纸。

  • PdfWriter.getInstance 方法把 Document 和一个文件输出流关联起来,这里指定生成的 PDF 文件叫 itext_example.pdf

  • 调用 document.open() 把“白纸”打开,这样就能往里面添加内容啦。

  • document.add(new Paragraph("...")) 往文档里添加一个段落,就像在白纸上写了一句话。

  • 最后在 finally 块里调用 document.close() 把“白纸”合上,确保资源都正确释放。

Maven 依赖
<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13.3</version>
</dependency>

用 Apache PDFBox 库生成 PDF

思路
  1. 先把 Apache PDFBox 库引入进来,这也是一个生成 PDF 的厉害工具。

  2. 创建一个 PDDocument 对象,这个对象就像是一个 PDF 的容器。

  3. 创建一个 PDPage 表示页面,然后把它添加到 PDDocument 里,就像给容器里放了一张纸。

  4. 获取 PDPageContentStream 来绘制内容,就像拿起笔在纸上画画。

  5. 最后关闭 PDPageContentStreamPDDocument,PDF 就生成好啦。

代码示例

java">import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType1Font;import java.io.IOException;public class PdfBoxPdfGenerator {public static void main(String[] args) {// 创建 PDDocument 对象,就像准备一个 PDF 容器PDDocument document = new PDDocument();try {// 创建一个页面,就像准备一张纸PDPage page = new PDPage();// 把这张纸放到 PDF 容器里document.addPage(page);// 获取页面内容流,就像拿起笔准备画画PDPageContentStream contentStream = new PDPageContentStream(document, page);// 设置字体和字号,就像选择画笔的粗细和样式contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12);// 开始新的一行,准备写字contentStream.beginText();// 设置文本位置,就像确定在纸上的写字位置contentStream.newLineAtOffset(100, 700);// 写入文本,在纸上写下内容contentStream.showText("嘿,这是用 Apache PDFBox 生成的 PDF 文档,很酷吧!");// 结束文本操作,写完了contentStream.endText();// 把笔放下,关闭内容流contentStream.close();// 保存这个 PDF 文档document.save("pdfbox_example.pdf");} catch (IOException e) {e.printStackTrace();} finally {// 把 PDF 容器关上,完成操作try {if (document != null) {document.close();}} catch (IOException e) {e.printStackTrace();}}}
}
代码解释及使用说明
  • 创建 PDDocument 对象,它代表整个 PDF 文档,就像一个容器。

  • 创建 PDPage 表示一个页面,用 document.addPage(page) 把页面添加到文档里,就像把纸放到容器里。

  • PDPageContentStream 来向页面里绘制内容,通过 setFont 方法设置字体和字号,beginText 开始文本操作,newLineAtOffset 设置文本位置,showText 写入文本,endText 结束文本操作。

  • 调用 contentStream.close() 关闭内容流,就像把笔放下。

  • 最后调用 document.save("pdfbox_example.pdf") 保存文档,在 finally 块里关闭 PDDocument,把容器关上。

Maven 依赖
<dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.24</version>
</dependency>

嘿,朋友,这下你知道怎么用 Java 生成 PDF 文档了吧!这两个库都挺好用的,你可以根据自己的需求选择哦。赶紧动手试试吧!


http://www.ppmy.cn/server/163840.html

相关文章

从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架(OLED设备层封装)

目录 OLED设备层驱动开发 如何抽象一个OLED 完成OLED的功能 初始化OLED 清空屏幕 刷新屏幕与光标设置1 刷新屏幕与光标设置2 刷新屏幕与光标设置3 绘制一个点 反色 区域化操作 区域置位 区域反色 区域更新 区域清空 测试我们的抽象 整理一下&#xff0c;我们应…

const的用法

文章目录 一、C和C中const修饰变量的区别二、const和一级指针的结合const修饰的量常出现的错误是:const和一级指针的结合总结&#xff1a;const和指针的类型转换公式 三、const和二级指针的结合 一、C和C中const修饰变量的区别 C中&#xff1a;const必须初始化&#xff0c;叫常…

java爬虫工具Jsoup学习

目录 前言 一、基本使用 二、爬取豆瓣电影的案例 三、Jsoup能做什么&#xff1f; 四、Jsoup相关概念 五、Jsoup获取文档 六、定位选择元素 七、获取数据 八、具体案例 前言 JSoup是一个用于处理HTML的Java库&#xff0c;它提供了一个非常方便类似于使用DOM&#xff0…

【视频+图文详解】HTML基础4-html标签的基本使用

图文教程 html标签的基本使用 无序列表 作用&#xff1a;定义一个没有顺序的列表结构 由两个标签组成&#xff1a;<ul>以及<li>&#xff08;两个标签都属于容器级标签&#xff0c;其中ul只能嵌套li标签&#xff0c;但li标签能嵌套任何标签&#xff0c;甚至ul标…

HarmonyOS简介:上架与分发

HUAWEI AppGallery Connect HUAWEI AppGallery Connect为开发者提供全球化、全场景一站式应用服务分发能力&#xff0c;并为开发者提供质量安全工程管理等领域的能力。大幅降低应用开发与运维难度&#xff0c;提升版本质量&#xff0c;帮助开发者获得用户&#xff0c;并实现收…

hadoop==docker desktop搭建hadoop

hdfs map readuce yarn https://medium.com/guillermovc/setting-up-hadoop-with-docker-and-using-mapreduce-framework-c1cd125d4f7b 清理资源 docker-compose down docker system prune -f

【机器学习】深入探索SVM:支持向量机的原理与应用

目录 &#x1f354; SVM引入 1.1什么是SVM? 1.2支持向量机分类 1.3 线性可分、线性和非线性的区分 &#x1f354; 小结 学习目标 知道SVM的概念 &#x1f354; SVM引入 1.1什么是SVM? 看一个故事&#xff0c;故事是这样子的&#xff1a; 在很久以前的情人节&#xf…

SAP SD学习笔记27 - 贩卖契约(框架协议)3 - 基本契约 - 定期请求(开票计划)

上两章讲了贩卖契约&#xff08;框架协议&#xff09;的概要&#xff0c;以及贩卖契约中最为常用的 基本契约 - 数量契约和金额契约。 SAP SD学习笔记26 - 贩卖契约(框架协议)的概要&#xff0c;基本契约 - 数量契约_sap 框架协议-CSDN博客 SAP SD学习笔记27 - 贩卖契约(框架…