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

相关推荐
Bunny021226 分钟前
SpringMVC笔记
java·redis·笔记
feng_blog66881 小时前
【docker-1】快速入门docker
java·docker·eureka
枫叶落雨2222 小时前
04JavaWeb——Maven-SpringBootWeb入门
java·maven
m0_748232393 小时前
SpringMVC新版本踩坑[已解决]
java
码农小灰3 小时前
Spring MVC中HandlerInterceptor和Filter的区别
java·spring·mvc
乔木剑衣3 小时前
Java集合学习:HashMap的原理
java·学习·哈希算法·集合
专职4 小时前
spring boot中实现手动分页
java·spring boot·后端
神探阿航4 小时前
第十五届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组
java·算法·蓝桥杯
梓沂4 小时前
idea修改模块名导致程序编译出错
java·ide·intellij-idea
m0_748230445 小时前
创建一个Spring Boot项目
java·spring boot·后端