Java生成PDF文檔兩個超實用的庫( iText和Apache PDFBox)
前言
在 Java 里實現(xiàn) PDF 文檔生成那可真是個挺有意思的事兒,今兒個就來好好嘮嘮這個。咱有不少好用的庫可以選擇,下面就給你詳細講講其中兩個超實用的庫,一個是 iText,另一個是 Apache PDFBox。
用 iText 庫生成 PDF
思路
先把 iText 庫給引入進來,這就好比給咱的 Java 項目裝上了一個生成 PDF 的“神器”。
創(chuàng)建一個
Document對象,這個對象就像是一張白紙,咱要在上面繪制 PDF 的內(nèi)容。把這張“白紙”打開,同時設(shè)置好字體啥的,就像準備好畫筆和顏料。
往
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 {
// 把這張“白紙”和一個文件輸出流關(guān)聯(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和一個文件輸出流關(guān)聯(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)容,就像拿起筆在紙上畫畫。最后關(guān)閉
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);
// 設(shè)置字體和字號,就像選擇畫筆的粗細和樣式
contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12);
// 開始新的一行,準備寫字
contentStream.beginText();
// 設(shè)置文本位置,就像確定在紙上的寫字位置
contentStream.newLineAtOffset(100, 700);
// 寫入文本,在紙上寫下內(nèi)容
contentStream.showText("嘿,這是用 Apache PDFBox 生成的 PDF 文檔,很酷吧!");
// 結(jié)束文本操作,寫完了
contentStream.endText();
// 把筆放下,關(guān)閉內(nèi)容流
contentStream.close();
// 保存這個 PDF 文檔
document.save("pdfbox_example.pdf");
} catch (IOException e) {
e.printStackTrace();
} finally {
// 把 PDF 容器關(guān)上,完成操作
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方法設(shè)置字體和字號,beginText開始文本操作,newLineAtOffset設(shè)置文本位置,showText寫入文本,endText結(jié)束文本操作。調(diào)用
contentStream.close()關(guān)閉內(nèi)容流,就像把筆放下。最后調(diào)用
document.save("pdfbox_example.pdf")保存文檔,在finally塊里關(guān)閉PDDocument,把容器關(guān)上。
Maven 依賴
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.24</version>
</dependency>嘿,朋友,這下你知道怎么用 Java 生成 PDF 文檔了吧!這兩個庫都挺好用的,你可以根據(jù)自己的需求選擇哦。趕緊動手試試吧!
總結(jié)
到此這篇關(guān)于Java生成PDF文檔的文章就介紹到這了,更多相關(guān)Java生成PDF文檔內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mybatis?resultMap之collection聚集兩種實現(xiàn)方式
本文主要介紹了mybatis?resultMap之collection聚集兩種實現(xiàn)方式,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2024-09-09
詳解@ConfigurationProperties實現(xiàn)原理與實戰(zhàn)
這篇文章主要介紹了詳解@ConfigurationProperties實現(xiàn)原理與實戰(zhàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2020-10-10
IDEA設(shè)置maven修改settings.xml配置文件無法加載倉庫的解決方案
這篇文章主要介紹了IDEA設(shè)置maven修改settings.xml配置文件無法加載倉庫的解決方案,幫助大家更好的利用IDEA進行JAVA的開發(fā)學(xué)習,感興趣的朋友可以了解下2021-01-01
JDK生成WebService客戶端代碼以及調(diào)用方式
WebService 是一種跨編程語言和跨操作系統(tǒng)平臺的遠程調(diào)用技術(shù),下面這篇文章主要給大家介紹了關(guān)于JDK生成WebService客戶端代碼以及調(diào)用方式的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-08-08
SpringCloud微服務(wù)之Hystrix組件實現(xiàn)服務(wù)熔斷的方法
微服務(wù)架構(gòu)特點就是多服務(wù),多數(shù)據(jù)源,支撐系統(tǒng)應(yīng)用。這樣導(dǎo)致微服務(wù)之間存在依賴關(guān)系。這篇文章主要介紹了SpringCloud微服務(wù)之Hystrix組件實現(xiàn)服務(wù)熔斷的方法,需要的朋友可以參考下2019-08-08
Spring Cloud學(xué)習教程之Zuul統(tǒng)一異常處理與回退
Spring Cloud Zuul對異常的處理整體來說還是比較方便的,流程也比較清晰,下面這篇文章主要給大家介紹了關(guān)于Spring Cloud學(xué)習教程之Zuul統(tǒng)一異常處理與回退的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習學(xué)習吧。2018-04-04

