Java生成PDF文檔兩個超實用的庫( iText和Apache PDFBox)
前言
在 Java 里實現(xiàn) PDF 文檔生成那可真是個挺有意思的事兒,今兒個就來好好嘮嘮這個。咱有不少好用的庫可以選擇,下面就給你詳細講講其中兩個超實用的庫,一個是 iText,另一個是 Apache PDFBox。
用 iText 庫生成 PDF
思路
先把 iText 庫給引入進來,這就好比給咱的 Java 項目裝上了一個生成 PDF 的“神器”。
創(chuàng)建一個
Document
對象,這個對象就像是一張白紙,咱要在上面繪制 PDF 的內(nèi)容。把這張“白紙”打開,同時設置好字體啥的,就像準備好畫筆和顏料。
往
Document
里添加各種內(nèi)容,比如段落、表格這些,就像在白紙上畫畫。最后把“白紙”合上,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) { // 創(chuàng)建 Document 對象,就像準備好一張白紙 Document document = new Document(); try { // 把這張“白紙”和一個文件輸出流關聯(lián)起來,指定生成的 PDF 文件路徑 PdfWriter.getInstance(document, new FileOutputStream("itext_example.pdf")); // 打開這張“白紙”,準備畫畫 document.open(); // 在“白紙”上添加一個段落內(nèi)容 document.add(new Paragraph("嘿,這是用 iText 生成的 PDF 文檔哦,是不是很神奇!")); } catch (DocumentException | FileNotFoundException e) { e.printStackTrace(); } finally { // 合上“白紙”,完成 PDF 生成 if (document.isOpen()) { document.close(); } } } }
代碼解釋及使用說明
首先咱創(chuàng)建了一個
Document
對象,它就代表了整個 PDF 文檔,就像一張白紙。用
PdfWriter.getInstance
方法把Document
和一個文件輸出流關聯(lián)起來,這里指定生成的 PDF 文件叫itext_example.pdf
。調(diào)用
document.open()
把“白紙”打開,這樣就能往里面添加內(nèi)容啦。用
document.add(new Paragraph("..."))
往文檔里添加一個段落,就像在白紙上寫了一句話。最后在
finally
塊里調(diào)用document.close()
把“白紙”合上,確保資源都正確釋放。
Maven 依賴
<dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.13.3</version> </dependency>
用 Apache PDFBox 庫生成 PDF
思路
先把 Apache PDFBox 庫引入進來,這也是一個生成 PDF 的厲害工具。
創(chuàng)建一個
PDDocument
對象,這個對象就像是一個 PDF 的容器。創(chuàng)建一個
PDPage
表示頁面,然后把它添加到PDDocument
里,就像給容器里放了一張紙。獲取
PDPageContentStream
來繪制內(nèi)容,就像拿起筆在紙上畫畫。最后關閉
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) { // 創(chuàng)建 PDDocument 對象,就像準備一個 PDF 容器 PDDocument document = new PDDocument(); try { // 創(chuàng)建一個頁面,就像準備一張紙 PDPage page = new PDPage(); // 把這張紙放到 PDF 容器里 document.addPage(page); // 獲取頁面內(nèi)容流,就像拿起筆準備畫畫 PDPageContentStream contentStream = new PDPageContentStream(document, page); // 設置字體和字號,就像選擇畫筆的粗細和樣式 contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12); // 開始新的一行,準備寫字 contentStream.beginText(); // 設置文本位置,就像確定在紙上的寫字位置 contentStream.newLineAtOffset(100, 700); // 寫入文本,在紙上寫下內(nèi)容 contentStream.showText("嘿,這是用 Apache PDFBox 生成的 PDF 文檔,很酷吧!"); // 結(jié)束文本操作,寫完了 contentStream.endText(); // 把筆放下,關閉內(nèi)容流 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(); } } } }
代碼解釋及使用說明
創(chuàng)建
PDDocument
對象,它代表整個 PDF 文檔,就像一個容器。創(chuàng)建
PDPage
表示一個頁面,用document.addPage(page)
把頁面添加到文檔里,就像把紙放到容器里。用
PDPageContentStream
來向頁面里繪制內(nèi)容,通過setFont
方法設置字體和字號,beginText
開始文本操作,newLineAtOffset
設置文本位置,showText
寫入文本,endText
結(jié)束文本操作。調(diào)用
contentStream.close()
關閉內(nèi)容流,就像把筆放下。最后調(diào)用
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 文檔了吧!這兩個庫都挺好用的,你可以根據(jù)自己的需求選擇哦。趕緊動手試試吧!
總結(jié)
到此這篇關于Java生成PDF文檔的文章就介紹到這了,更多相關Java生成PDF文檔內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
超簡單的java獲取鼠標點擊位置坐標的實例(鼠標在Jframe上的坐標)
在Java窗體Jframe上獲取鼠標點擊的坐標,其中使用了匿名內(nèi)部類,實例代碼非常簡單易懂,大家可以學習一下2018-03-03Springboot+rabbitmq實現(xiàn)延時隊列的兩種方式
這篇文章主要介紹了Springboot+rabbitmq實現(xiàn)延時隊列的兩種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-05-05Java多線程的其他知識_動力節(jié)點Java學院整理
這篇文章主要介紹了Java多線程的其他知識,需要的朋友可以參考下2017-05-05EasyExcel工具讀取Excel空數(shù)據(jù)行問題的解決辦法
EasyExcel是阿里巴巴開源的一個excel處理框架,以使用簡單,節(jié)省內(nèi)存著稱,下面這篇文章主要給大家介紹了關于EasyExcel工具讀取Excel空數(shù)據(jù)行問題的解決辦法,需要的朋友可以參考下2022-08-08