Java生成PDF文档两个超实用的库( iText和Apache PDFBox)

 更新时间:2025年02月11日 09:33:01   作者:五行星辰  
这篇文章主要介绍了Java生成PDF文档两个超实用的库,分别是用 iText库以及用Apache PDFBox库生成PDF,文中通过代码介绍的非常详细,需要的朋友可以参考下

前言

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

用 iText 库生成 PDF

思路

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

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

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

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

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

代码示例

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

思路

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

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

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

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

  • 最后关闭 PDPageContentStream 和 PDDocument,PDF 就生成好啦。

代码示例

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 文档了吧!这两个库都挺好用的,你可以根据自己的需求选择哦。赶紧动手试试吧!

总结

到此这篇关于Java生成PDF文档的文章就介绍到这了,更多相关Java生成PDF文档内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java Agent探针技术详解示例

    Java Agent探针技术详解示例

    这篇文章主要介绍了Java Agent 探针技术详情,Java 中的 Agent 技术可以让我们无侵入性的去进行代理,最常用于程序调试、热部署、性能诊断分析等场景,下文更多相关资料,感兴趣的小伙伴可以参考一下
    2022-06-06
  • Spring配置文件中密码明文改为密文处理的通用方式

    Spring配置文件中密码明文改为密文处理的通用方式

    SpringBoot和SpringCloud中涉及多个配置文件,配置文件中对于密码默认是明文方式,这种方式在生产环境一般是不被允许的,为避免配置文件中出现明文,应当在配置文件中配置为密文,然后在启动时在程序内部完成解密,本文提供了通用的处理方式,需要的朋友可以参考下
    2025-01-01
  • mybatis resultMap之collection聚集两种实现方式

    mybatis resultMap之collection聚集两种实现方式

    本文主要介绍了mybatis resultMap之collection聚集两种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-09-09
  • 详解@ConfigurationProperties实现原理与实战

    详解@ConfigurationProperties实现原理与实战

    这篇文章主要介绍了详解@ConfigurationProperties实现原理与实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • java编程常用技术(推荐)

    java编程常用技术(推荐)

    下面小编就为大家带来一篇java编程常用技术(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • IDEA设置maven修改settings.xml配置文件无法加载仓库的解决方案

    IDEA设置maven修改settings.xml配置文件无法加载仓库的解决方案

    这篇文章主要介绍了IDEA设置maven修改settings.xml配置文件无法加载仓库的解决方案,帮助大家更好的利用IDEA进行JAVA的开发学习,感兴趣的朋友可以了解下
    2021-01-01
  • 详解springmvc如何处理接受http请求

    详解springmvc如何处理接受http请求

    这篇文章主要给大家介绍了springmvc如何处理接受http请求,文中通过代码示例给大家讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-02-02
  • JDK生成WebService客户端代码以及调用方式

    JDK生成WebService客户端代码以及调用方式

    WebService 是一种跨编程语言和跨操作系统平台的远程调用技术,下面这篇文章主要给大家介绍了关于JDK生成WebService客户端代码以及调用方式的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-08-08
  • SpringCloud微服务之Hystrix组件实现服务熔断的方法

    SpringCloud微服务之Hystrix组件实现服务熔断的方法

    微服务架构特点就是多服务,多数据源,支撑系统应用。这样导致微服务之间存在依赖关系。这篇文章主要介绍了SpringCloud微服务之Hystrix组件实现服务熔断的方法,需要的朋友可以参考下
    2019-08-08
  • Spring Cloud学习教程之Zuul统一异常处理与回退

    Spring Cloud学习教程之Zuul统一异常处理与回退

    Spring Cloud Zuul对异常的处理整体来说还是比较方便的,流程也比较清晰,下面这篇文章主要给大家介绍了关于Spring Cloud学习教程之Zuul统一异常处理与回退的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2018-04-04

最新评论