嘿,朋友!在 Java 里实现 PDF 文档生成那可真是个挺有意思的事儿,今儿个就来好好唠唠这个。咱有不少好用的库可以选择,下面就给你详细讲讲其中两个超实用的库,一个是 iText,另一个是 Apache PDFBox。
用 iText 库生成 PDF
思路
-
先把 iText 库给引入进来,这就好比给咱的 Java 项目装上了一个生成 PDF 的"神器"。
-
创建一个
Document
对象,这个对象就像是一张白纸,咱要在上面绘制 PDF 的内容。 -
把这张"白纸"打开,同时设置好字体啥的,就像准备好画笔和颜料。
-
往
Document
里添加各种内容,比如段落、表格这些,就像在白纸上画画。 -
最后把"白纸"合上,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
思路
-
先把 Apache PDFBox 库引入进来,这也是一个生成 PDF 的厉害工具。
-
创建一个
PDDocument
对象,这个对象就像是一个 PDF 的容器。 -
创建一个
PDPage
表示页面,然后把它添加到PDDocument
里,就像给容器里放了一张纸。 -
获取
PDPageContentStream
来绘制内容,就像拿起笔在纸上画画。 -
最后关闭
PDPageContentStream
和PDDocument
,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 文档了吧!这两个库都挺好用的,你可以根据自己的需求选择哦。赶紧动手试试吧!