Java生成PDF文檔兩個(gè)超實(shí)用的庫( iText和Apache PDFBox)
前言
在 Java 里實(shí)現(xiàn) PDF 文檔生成那可真是個(gè)挺有意思的事兒,今兒個(gè)就來好好嘮嘮這個(gè)。咱有不少好用的庫可以選擇,下面就給你詳細(xì)講講其中兩個(gè)超實(shí)用的庫,一個(gè)是 iText,另一個(gè)是 Apache PDFBox。
用 iText 庫生成 PDF
思路
先把 iText 庫給引入進(jìn)來,這就好比給咱的 Java 項(xiàng)目裝上了一個(gè)生成 PDF 的“神器”。
創(chuàng)建一個(gè)
Document對象,這個(gè)對象就像是一張白紙,咱要在上面繪制 PDF 的內(nèi)容。把這張“白紙”打開,同時(shí)設(shè)置好字體啥的,就像準(zhǔn)備好畫筆和顏料。
往
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 對象,就像準(zhǔn)備好一張白紙
Document document = new Document();
try {
// 把這張“白紙”和一個(gè)文件輸出流關(guān)聯(lián)起來,指定生成的 PDF 文件路徑
PdfWriter.getInstance(document, new FileOutputStream("itext_example.pdf"));
// 打開這張“白紙”,準(zhǔn)備畫畫
document.open();
// 在“白紙”上添加一個(gè)段落內(nèi)容
document.add(new Paragraph("嘿,這是用 iText 生成的 PDF 文檔哦,是不是很神奇!"));
} catch (DocumentException | FileNotFoundException e) {
e.printStackTrace();
} finally {
// 合上“白紙”,完成 PDF 生成
if (document.isOpen()) {
document.close();
}
}
}
}代碼解釋及使用說明
首先咱創(chuàng)建了一個(gè)
Document對象,它就代表了整個(gè) PDF 文檔,就像一張白紙。用
PdfWriter.getInstance方法把Document和一個(gè)文件輸出流關(guān)聯(lián)起來,這里指定生成的 PDF 文件叫itext_example.pdf。調(diào)用
document.open()把“白紙”打開,這樣就能往里面添加內(nèi)容啦。用
document.add(new Paragraph("..."))往文檔里添加一個(gè)段落,就像在白紙上寫了一句話。最后在
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 庫引入進(jìn)來,這也是一個(gè)生成 PDF 的厲害工具。
創(chuàng)建一個(gè)
PDDocument對象,這個(gè)對象就像是一個(gè) PDF 的容器。創(chuàng)建一個(gè)
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 對象,就像準(zhǔn)備一個(gè) PDF 容器
PDDocument document = new PDDocument();
try {
// 創(chuàng)建一個(gè)頁面,就像準(zhǔn)備一張紙
PDPage page = new PDPage();
// 把這張紙放到 PDF 容器里
document.addPage(page);
// 獲取頁面內(nèi)容流,就像拿起筆準(zhǔn)備畫畫
PDPageContentStream contentStream = new PDPageContentStream(document, page);
// 設(shè)置字體和字號(hào),就像選擇畫筆的粗細(xì)和樣式
contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12);
// 開始新的一行,準(zhǔn)備寫字
contentStream.beginText();
// 設(shè)置文本位置,就像確定在紙上的寫字位置
contentStream.newLineAtOffset(100, 700);
// 寫入文本,在紙上寫下內(nèi)容
contentStream.showText("嘿,這是用 Apache PDFBox 生成的 PDF 文檔,很酷吧!");
// 結(jié)束文本操作,寫完了
contentStream.endText();
// 把筆放下,關(guān)閉內(nèi)容流
contentStream.close();
// 保存這個(gè) 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對象,它代表整個(gè) PDF 文檔,就像一個(gè)容器。創(chuàng)建
PDPage表示一個(gè)頁面,用document.addPage(page)把頁面添加到文檔里,就像把紙放到容器里。用
PDPageContentStream來向頁面里繪制內(nèi)容,通過setFont方法設(shè)置字體和字號(hào),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 文檔了吧!這兩個(gè)庫都挺好用的,你可以根據(jù)自己的需求選擇哦。趕緊動(dòng)手試試吧!
總結(jié)
到此這篇關(guān)于Java生成PDF文檔的文章就介紹到這了,更多相關(guān)Java生成PDF文檔內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中關(guān)于控制臺(tái)讀取數(shù)字或字符串的方法
下面小編就為大家?guī)硪黄狫ava中關(guān)于控制臺(tái)讀取數(shù)字或字符串的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-10-10
Spring Boot基礎(chǔ)學(xué)習(xí)之Mybatis操作中使用Redis做緩存詳解
這篇文章主要給大家介紹了關(guān)于Spring Boot基礎(chǔ)學(xué)習(xí)之Mybatis操作中使用Redis做緩存的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用spring boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧2018-11-11
調(diào)用Process.waitfor導(dǎo)致的進(jìn)程掛起問題及解決
這篇文章主要介紹了調(diào)用Process.waitfor導(dǎo)致的進(jìn)程掛起問題及解決,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
Java優(yōu)雅的處理金錢問題(BigDecimal)
本文主要介紹了Java優(yōu)雅的處理金錢問題(BigDecimal),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
Spring Cloud Alibaba 使用 Feign+Sentinel 完成熔斷的示例
這篇文章主要介紹了Spring Cloud Alibaba 使用 Feign+Sentinel 完成熔斷的示例,幫助大家更好的理解和學(xué)習(xí)使用Spring Cloud,感興趣的朋友可以了解下2021-03-03

