Java是大規(guī)模和企業(yè)級應(yīng)用程序最常用的編程語言之一亏吝。PDF 格式代表可移植文檔格式掠哥,為人們提供了一種簡單、可靠的方式來呈現(xiàn)和交換文檔 - 無論查看文檔的任何人使用何種軟件腮介、硬件或操作系統(tǒng)。因此端衰,pdf 是一種廣泛使用的格式叠洗,用于在軟件應(yīng)用程序中生成文檔。
HTML 用于表示 Web 瀏覽器中的信息旅东。因此灭抑,應(yīng)用程序的每個信息、報告抵代、發(fā)票或網(wǎng)頁都是 HTML 格式的腾节。因此,我們需要學(xué)習從HTML生成pdf文件。在本教程中禀倔,我們將學(xué)習將 HTML 文件轉(zhuǎn)換為 pdf 文件榄融。
我們需要一個第三方庫來將 HTML 文件轉(zhuǎn)換為 pdf 文件。有多個庫可用救湖,其優(yōu)點和缺點愧杯。其中一些是付費的,有些沒有提供足夠的功能鞋既,其中一些不能以 100% 的準確性轉(zhuǎn)換 HTML 文件力九,其中一些存在性能問題。
我發(fā)現(xiàn)[IronPDF](https://ironpdf.com/java/)?java庫非常適合此目的邑闺,因為它可以免費開發(fā)跌前,更安全,在單個庫中提供100%精度的所有功能陡舅,并且具有出色的性能抵乓。
在繼續(xù)之前,讓我們簡要介紹一下 IronPDF靶衍。
##? IronPDF:
IronPDF是由[IronSoftware](https://ironpdf.com/java/)開發(fā)的最流行的Java PDF庫灾炭,用于創(chuàng)建和編輯PDF。其簡單的API使開發(fā)人員能夠在各種Java項目中從HTML創(chuàng)建專業(yè)颅眶,高質(zhì)量的PDF蜈出,包括Scala和Kotlin。IronPDF通過gRPC與IronPdfEngine通信涛酗。
主要功能包括使用HTML铡原,HTTP,JavaScript商叹,CSS和各種圖像格式創(chuàng)建PDF文檔燕刻。我們還可以添加頁眉和頁腳、簽名剖笙、附件酌儒、密碼和安全性。它提供了完整的多線程支持枯途,而且數(shù)量更多!
現(xiàn)在我們將開始代碼示例籍滴。
首先酪夷,我們需要創(chuàng)建一個新的 maven 項目
命名項目,選擇位置孽惰,選擇語言晚岭,生成系統(tǒng)和JDK。點擊創(chuàng)建按鈕勋功。將創(chuàng)建一個新項目坦报。
現(xiàn)在库说,我們將在我們的Java應(yīng)用程序中安裝IronPDF。
## [](https://dev.to/mhamzap10/java-generate-pdf-from-html-without-losing-formatting-2dam#install-ironpdf-java-library)安裝 IronPDF Java 庫
我們需要將 IronPDF 定義為 pom.xml 文件中的依賴項片择,以便在我們的應(yīng)用程序中安裝此庫潜的。打開 pom.xml 文件并在該文件中添加以下 XML。
```
<dependency>
? ? ? ? <groupId>com.ironsoftware</groupId>
? ? ? ? <artifactId>ironpdf</artifactId>
? ? ? ? <version>2023.1.1</version>
? ? </dependency>
<dependency>
? ? <groupId>org.slf4j</groupId>
? ? <artifactId>slf4j-simple</artifactId>
? ? <version>2.0.3</version>
</dependency>
```
現(xiàn)在字管,生成項目啰挪。該庫將從?[maven 存儲庫](https://central.sonatype.com/artifact/com.ironsoftware/ironpdf/2023.1.1)自動安裝到我們的應(yīng)用程序中。
用 HTML 創(chuàng)建 pdf 文件的示例開始嘲叔。
## [](https://dev.to/mhamzap10/java-generate-pdf-from-html-without-losing-formatting-2dam#create-pdf-file-from-html-string)從 HTML 字符串創(chuàng)建 PDF 文件:
請參考以下示例:
```
String htmlString = "<h1>My First PDF File<h1/><p> This is sample pdf file</p>";
? ? ? ? PdfDocument myPdf = PdfDocument.renderHtmlAsPdf(htmlString);
// Save the PdfDocument to a file
? ? ? ? try {
? ? ? ? ? ? myPdf.saveAs(Paths.get("myPDF.pdf") );
? ? ? ? } catch (IOException e) {
? ? ? ? ? ? throw new RuntimeException(e);
? ? ? ? }
```
我們已將 HTML 內(nèi)容分配給一個字符串變量亡呵。由 IronPDF 庫的 PdfDocument 類提供的 renderHtmlAsPdf() 函數(shù)將字符串作為參數(shù),并將 html 內(nèi)容轉(zhuǎn)換為 pdf 文檔實例硫戈。saveAs() 函數(shù)將位置路徑作為參數(shù)锰什,并將該 pdf 文檔實例保存到我們提供的目錄中。
try-and-catch 語句用于處理任何運行時異常丁逝。這只是在處理文件或數(shù)據(jù)庫時使用的最佳做法汁胆。
## [](https://dev.to/mhamzap10/java-generate-pdf-from-html-without-losing-formatting-2dam#output)輸出:
以下是上述代碼生成的 pdf。
我們已將 HTML 內(nèi)容分配給一個字符串變量果港。由 IronPDF 庫的 PdfDocument 類提供的 renderHtmlAsPdf() 函數(shù)將字符串作為參數(shù)沦泌,并將 html 內(nèi)容轉(zhuǎn)換為 pdf 文檔實例。saveAs() 函數(shù)將位置路徑作為參數(shù)辛掠,并將該 pdf 文檔實例保存到我們提供的目錄中谢谦。
try-and-catch 語句用于處理任何運行時異常。這只是在處理文件或數(shù)據(jù)庫時使用的最佳做法萝衩。
## [](https://dev.to/mhamzap10/java-generate-pdf-from-html-without-losing-formatting-2dam#output)輸出:
以下是上述代碼生成的 pdf回挽。
以下是示例代碼片段:
```
PdfDocument myPdf = PdfDocument.renderHtmlFileAsPdf("myFile.html");
// Save the PdfDocument to a file
? ? ? ? try {
? ? ? ? ? ? myPdf.saveAs("myPDF.pdf");
? ? ? ? } catch (IOException e) {
? ? ? ? ? ? throw new RuntimeException(e);
? ? ? ? }
? ? }
```
renderHtmlFileAsPdf() 將 HTML 文件路徑作為參數(shù),并將給定的 HTML 文件轉(zhuǎn)換為 pdf 文檔猩谊。稍后千劈,此pdf文檔將使用saveAs()函數(shù)保存到本地驅(qū)動器中。
## [](https://dev.to/mhamzap10/java-generate-pdf-from-html-without-losing-formatting-2dam#output)輸出:
以下是我們的程序生成的pdf文檔牌捷。
![keusdq3y8n2co88belif.png](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/81d289f182284c79a6331672c4afc9e5~tplv-k3u1fbpfcp-watermark.image?)
現(xiàn)在墙牌,我們將使用一個包含CSS和Javascript的大型HTML文檔。我們將觀察它在將 html 轉(zhuǎn)換為 pdf 時保持的準確性和設(shè)計暗甥。
## [](https://dev.to/mhamzap10/java-generate-pdf-from-html-without-losing-formatting-2dam#convert-html-files-into-a-pdf-document)將 HTML 文件轉(zhuǎn)換為 PDF 文檔:
我將使用以下示例 HTML 頁面喜滨,其中包含圖像、動畫撤防、樣式虽风、jQuery 和引導(dǎo)程序。
我們可以看到示例 HTML 文檔具有圖像和復(fù)雜的樣式。我們將此HTML文件轉(zhuǎn)換為PDF文檔辜膝,并觀察樣式和內(nèi)容的準確性无牵。
我們將使用與上面示例中使用的相同代碼行。
```
PdfDocument myPdf = PdfDocument.renderHtmlFileAsPdf("index.html");
// Save the PdfDocument to a file
? ? ? ? try {
? ? ? ? ? ? myPdf.saveAs("myPDF.pdf");
? ? ? ? } catch (IOException e) {
? ? ? ? ? ? throw new RuntimeException(e);
? ? ? ? }
? ? }
```
上一示例中已提供代碼說明厂抖。我們只是改變了路徑茎毁,其余的都是一樣的。
## [](https://dev.to/mhamzap10/java-generate-pdf-from-html-without-losing-formatting-2dam#output)輸出:
以下是生成的 pdf:
我們可以看到验游,使用IronPDF生成pdf非常容易充岛。pdf 內(nèi)容和樣式與源文檔相同。
我們還可以使用 URL 生成 pdf 文件耕蝉。
## [](https://dev.to/mhamzap10/java-generate-pdf-from-html-without-losing-formatting-2dam#convert-url-to-pdf-document)將網(wǎng)址轉(zhuǎn)換為 PDF 文檔:
以下代碼示例將從 URL 生成 pdf 文件崔梗。
```
PdfDocument myPdf = PdfDocument.renderUrlAsPdf("https://en.wikipedia.org/wiki/PDF");
// Save the PdfDocument to a file
? ? ? ? try {
? ? ? ? ? ? myPdf.saveAs("myPDF.pdf");
? ? ? ? } catch (IOException e) {
? ? ? ? ? ? throw new RuntimeException(e);
? ? ? ? }
? ? }
```
renderUrlAsPdf() 將 URL 作為參數(shù),并將該 URL 轉(zhuǎn)換為 pdf 文檔垒在。稍后蒜魄,此pdf文檔將使用saveAs()函數(shù)保存到本地驅(qū)動器中。
## [](https://dev.to/mhamzap10/java-generate-pdf-from-html-without-losing-formatting-2dam#output)輸出:
以下是生成的 pdf:
我們還可以添加水印场躯、頁眉谈为、頁腳、數(shù)字簽名等等踢关。
讓我們將自定義水印伞鲫、頁眉和頁腳添加到生成的 pdf 中。
## [](https://dev.to/mhamzap10/java-generate-pdf-from-html-without-losing-formatting-2dam#add-watermark)添加水忧┪琛:
以下代碼會將水印添加到我們的 pdf 文件中秕脓。?
`myPdf.applyWatermark("My Custom Watermark");`
## [](https://dev.to/mhamzap10/java-generate-pdf-from-html-without-losing-formatting-2dam#add-header-and-footer)添加頁眉和頁腳:
`myPdf.addHtmlHeader(new HtmlHeaderFooter("my Header"));`
## [](https://dev.to/mhamzap10/java-generate-pdf-from-html-without-losing-formatting-2dam#add-footer)添加頁腳:
`myPdf.addHtmlFooter(new HtmlHeaderFooter("my Header"));`
同樣,我們可以添加前景儒搭、復(fù)制 pdf吠架、合并 pdf 等等。