前言
在 Java 里实现 PDF 文档生成那可真是个挺有意思的事儿,今儿个就来好好唠唠这个。咱有不少好用的库可以选择,下面就给你详细讲讲其中两个超实用的库,一个是 iText,另一个是 Apache PDFBox。
用 iText 库生成 PDF
思路
-
先把 iText 库给引入进来,这就好比给咱的 Java 项目装上了一个生成 PDF 的“神器”。
-
创建一个
Document
对象,这个对象就像是一张白纸,咱要在上面绘制 PDF 的内容。 -
把这张“白纸”打开,同时设置好字体啥的,就像准备好画笔和颜料。
-
往
Document
里添加各种内容,比如段落、表格这些,就像在白纸上画画。 -
最后把“白纸”合上,PDF 就生成啦。
代码示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 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 依赖
1 | com.itextpdfitextpdf5.5.13.3 |
用 Apache PDFBox 库生成 PDF
思路
-
先把 Apache PDFBox 库引入进来,这也是一个生成 PDF 的厉害工具。
-
创建一个
PDDocument
对象,这个对象就像是一个 PDF 的容器。 -
创建一个
PDPage
表示页面,然后把它添加到PDDocument
里,就像给容器里放了一张纸。 -
获取
PDPageContentStream
来绘制内容,就像拿起笔在纸上画画。 -
最后关闭
PDPageContentStream
和PDDocument
,PDF 就生成好啦。
代码示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | 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 依赖
1 | org.apache.pdfboxpdfbox2.0.24 |
嘿,朋友,这下你知道怎么用 Java 生成 PDF 文档了吧!这两个库都挺好用的,你可以根据自己的需求选择哦。赶紧动手试试吧!
总结
到此这篇关于Java生成PDF文档的文章就介绍到这了,更多相关Java生成PDF文档内容请搜索IT俱乐部以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT俱乐部!