Java HTML生成PDF

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 等等。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末搂鲫,一起剝皮案震驚了整個濱河市傍药,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌魂仍,老刑警劉巖拐辽,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異擦酌,居然都是意外死亡薛训,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門仑氛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事锯岖〗橥啵” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵出吹,是天一觀的道長遇伞。 經(jīng)常有香客問我,道長捶牢,這世上最難降的妖魔是什么鸠珠? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮秋麸,結(jié)果婚禮上渐排,老公的妹妹穿的比我還像新娘。我一直安慰自己灸蟆,他們只是感情好驯耻,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布纲刀。 她就那樣靜靜地躺著荣倾,像睡著了一般俯逾。 火紅的嫁衣襯著肌膚如雪铸敏。 梳的紋絲不亂的頭發(fā)上湃窍,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天豺裆,我揣著相機與錄音淆攻,去河邊找鬼皇钞。 笑死瓤帚,一個胖子當著我的面吹牛描姚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播缘滥,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼轰胁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了朝扼?” 一聲冷哼從身側(cè)響起赃阀,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎擎颖,沒想到半個月后榛斯,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡搂捧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年驮俗,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片允跑。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡王凑,死狀恐怖搪柑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情索烹,我是刑警寧澤工碾,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站百姓,受9級特大地震影響渊额,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜垒拢,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一旬迹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧求类,春花似錦奔垦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至仓技,卻和暖如春鸵贬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背脖捻。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工阔逼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人地沮。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓嗜浮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親摩疑。 傳聞我的和親對象是個殘疾皇子危融,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容