Java是大规模和企业级应用程序最常用的编程语言之一。PDF 格式代表可移植文档格式,为人们提供了一种简单、可靠的方式来呈现和交换文档 - 无论查看文档的任何人使用何种软件、硬件或操作系统。因此,pdf 是一种广泛使用的格式,用于在软件应用程序中生成文档。
HTML 用于表示 Web 浏览器中的信息。因此,应用程序的每个信息、报告、发票或网页都是 HTML 格式的。因此,我们需要学习从HTML生成pdf文件。在本教程中,我们将学习将 HTML 文件转换为 pdf 文件。
我们需要一个第三方库来将 HTML 文件转换为 pdf 文件。有多个库可用,其优点和缺点。其中一些是付费的,有些没有提供足够的功能,其中一些不能以 100% 的准确性转换 HTML 文件,其中一些存在性能问题。
我发现[IronPDF](https://ironpdf.com/java/)?java库非常适合此目的,因为它可以免费开发,更安全,在单个库中提供100%精度的所有功能,并且具有出色的性能。
在继续之前,让我们简要介绍一下 IronPDF。
##? IronPDF:
IronPDF是由[IronSoftware](https://ironpdf.com/java/)开发的最流行的Java PDF库,用于创建和编辑PDF。其简单的API使开发人员能够在各种Java项目中从HTML创建专业,高质量的PDF,包括Scala和Kotlin。IronPDF通过gRPC与IronPdfEngine通信。
主要功能包括使用HTML,HTTP,JavaScript,CSS和各种图像格式创建PDF文档。我们还可以添加页眉和页脚、签名、附件、密码和安全性。它提供了完整的多线程支持,而且数量更多!
现在我们将开始代码示例。
首先,我们需要创建一个新的 maven 项目
命名项目,选择位置,选择语言,生成系统和JDK。点击创建按钮。将创建一个新项目。
现在,我们将在我们的Java应用程序中安装IronPDF。
## [](https://dev.to/mhamzap10/java-generate-pdf-from-html-without-losing-formatting-2dam#install-ironpdf-java-library)安装 IronPDF Java 库
我们需要将 IronPDF 定义为 pom.xml 文件中的依赖项,以便在我们的应用程序中安装此库。打开 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>
```
现在,生成项目。该库将从?[maven 存储库](https://central.sonatype.com/artifact/com.ironsoftware/ironpdf/2023.1.1)自动安装到我们的应用程序中。
用 HTML 创建 pdf 文件的示例开始。
## [](https://dev.to/mhamzap10/java-generate-pdf-from-html-without-losing-formatting-2dam#create-pdf-file-from-html-string)从 HTML 字符串创建 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 内容分配给一个字符串变量。由 IronPDF 库的 PdfDocument 类提供的 renderHtmlAsPdf() 函数将字符串作为参数,并将 html 内容转换为 pdf 文档实例。saveAs() 函数将位置路径作为参数,并将该 pdf 文档实例保存到我们提供的目录中。
try-and-catch 语句用于处理任何运行时异常。这只是在处理文件或数据库时使用的最佳做法。
## [](https://dev.to/mhamzap10/java-generate-pdf-from-html-without-losing-formatting-2dam#output)输出:
以下是上述代码生成的 pdf。
我们已将 HTML 内容分配给一个字符串变量。由 IronPDF 库的 PdfDocument 类提供的 renderHtmlAsPdf() 函数将字符串作为参数,并将 html 内容转换为 pdf 文档实例。saveAs() 函数将位置路径作为参数,并将该 pdf 文档实例保存到我们提供的目录中。
try-and-catch 语句用于处理任何运行时异常。这只是在处理文件或数据库时使用的最佳做法。
## [](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 文件路径作为参数,并将给定的 HTML 文件转换为 pdf 文档。稍后,此pdf文档将使用saveAs()函数保存到本地驱动器中。
## [](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?)
现在,我们将使用一个包含CSS和Javascript的大型HTML文档。我们将观察它在将 html 转换为 pdf 时保持的准确性和设计。
## [](https://dev.to/mhamzap10/java-generate-pdf-from-html-without-losing-formatting-2dam#convert-html-files-into-a-pdf-document)将 HTML 文件转换为 PDF 文档:
我将使用以下示例 HTML 页面,其中包含图像、动画、样式、jQuery 和引导程序。
我们可以看到示例 HTML 文档具有图像和复杂的样式。我们将此HTML文件转换为PDF文档,并观察样式和内容的准确性。
我们将使用与上面示例中使用的相同代码行。
```
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 内容和样式与源文档相同。
我们还可以使用 URL 生成 pdf 文件。
## [](https://dev.to/mhamzap10/java-generate-pdf-from-html-without-losing-formatting-2dam#convert-url-to-pdf-document)将网址转换为 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 作为参数,并将该 URL 转换为 pdf 文档。稍后,此pdf文档将使用saveAs()函数保存到本地驱动器中。
## [](https://dev.to/mhamzap10/java-generate-pdf-from-html-without-losing-formatting-2dam#output)输出:
以下是生成的 pdf:
我们还可以添加水印、页眉、页脚、数字签名等等。
让我们将自定义水印、页眉和页脚添加到生成的 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"));`
同样,我们可以添加前景、复制 pdf、合并 pdf 等等。