Java 生成 PDF 文档 如此简单

嘿,朋友!在 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 依赖
XML 复制代码
<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 依赖
XML 复制代码
<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.24</version>
</dependency>

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

相关推荐
panzer_maus10 小时前
归并排序的简单介绍
java·数据结构·算法
Smartdaili China10 小时前
掌握Java网页抓取:技术与示例完整指南
java·网络·学习·指南·网页·住宅ip·爬虫api
程序员游老板11 小时前
基于SpringBoot3_vue3_MybatisPlus_Mysql_Maven的社区养老系统/养老院管理系统
java·spring boot·mysql·毕业设计·软件工程·信息与通信·毕设
福尔摩斯张11 小时前
C++核心特性精讲:从C语言痛点出发,掌握现代C++编程精髓(超详细)
java·linux·c语言·数据结构·c++·驱动开发·算法
@淡 定12 小时前
Spring中@Autowired注解的实现原理
java·后端·spring
时空无限12 小时前
Java Buildpack Reference
java·开发语言
爱笑的眼睛1113 小时前
超越剪枝与量化:下一代AI模型压缩工具的技术演进与实践
java·人工智能·python·ai
阿里云云原生13 小时前
Android App 崩溃排查指南:阿里云 RUM 如何让你快速从告警到定位根因?
android·java
历程里程碑13 小时前
C++ 9 stack_queue:数据结构的核心奥秘
java·开发语言·数据结构·c++·windows·笔记·算法