Java 把 HTML 文件转为 PDF

Java 把 HTML 文件转为 PDF

Java 把 HTML 文件转为 PDF

在开发过程中,有时候我们需要将 HTML 文件转换为 PDF 文件。这在很多场景下都是非常有用的,比如生成报告、导出数据等。本文将详细介绍如何使用 Java 实现这一功能。

使用 iText 进行转换

iText 是一个流行的 Java PDF 库,可以用来生成 PDF 文档、处理 PDF 文件等。我们可以利用 iText 来进行 HTML 文件到 PDF 文件的转换。

首先,我们需要添加 iText 的相关依赖。在 Maven 项目中,可以在 pom.xml 文件中加入以下依赖:

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.13</version>
</dependency>

接下来,我们编写转换的代码。以下是一个简单的示例代码:

import com.itextpdf.text.Document;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.html.simpleparser.HTMLWorker;
import com.itextpdf.text.pdf.PdfWriter;

import java.io.FileOutputStream;
import java.io.StringReader;

public class HtmlToPdfConverter {

    public static void convertHtmlToPdf(String htmlContent, String pdfFilePath) throws Exception {
        Document document = new Document(PageSize.A4);
        PdfWriter.getInstance(document, new FileOutputStream(pdfFilePath));
        document.open();
        HTMLWorker htmlWorker = new HTMLWorker(document);
        htmlWorker.parse(new StringReader(htmlContent));
        document.close();
    }

    public static void main(String[] args) {
        String html = "<html><body><h1>Hello, World!</h1><p>This is a PDF file generated from HTML.</p></body></html>";
        String pdfFilePath = "output.pdf";

        try {
            convertHtmlToPdf(html, pdfFilePath);
            System.out.println("PDF file generated successfully.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在上面的示例中,convertHtmlToPdf 方法接受 HTML 内容和需要保存的 PDF 文件路径作为参数,将 HTML 内容转换为 PDF 文件。

我们可以运行 main 方法来生成 PDF 文件。在上面的示例中,我们生成的 PDF 文件内容为一个简单的 HTML 页面,包含一个标题和一段文字。

进阶功能

在实际应用中,我们会遇到各种各样的要求,需要对转换的 PDF 文件进行更多的定制。例如:

  • 改变 PDF 的页面大小、方向
  • 添加水印、页眉、页脚
  • 设置字体、颜色等样式
  • 处理图片、表格等复杂内容

iText 提供了丰富的 API 来实现这些功能。我们可以根据需要定制化我们的 PDF 文件。

以下是一个稍微复杂一点的示例,实现了在 PDF 文件中添加水印的功能:

import com.itextpdf.text.Document;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.text.pdf.draw.VerticalPositionMark;

import java.io.FileOutputStream;

public class HtmlToPdfWithWatermark {

    public static void convertHtmlToPdfWithWatermark(String htmlContent, String pdfFilePath, String watermark) throws Exception {
        Document document = new Document(PageSize.A4);
        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(pdfFilePath));
        document.open();

        // Add content from HTML
        Paragraph para = new Paragraph(htmlContent);
        document.add(para);

        // Add watermark
        PdfContentByte content = writer.getDirectContentUnder();
        content.beginText();
        content.setFontAndSize(content.getFont().getBaseFont(), 36);
        content.setColorFill(BaseColor.LIGHT_GRAY);
        content.showTextAligned(Element.ALIGN_CENTER,
                watermark,
                PageSize.A4.getWidth() / 2,
                PageSize.A4.getHeight() / 2, 45);
        content.endText();

        document.close();
    }

    public static void main(String[] args) {
        String html = "<html><body><h1>Hello, World!</h1><p>This is a PDF file with watermark.</p></body></html>";
        String pdfFilePath = "output_with_watermark.pdf";
        String watermark = "Confidential";

        try {
            convertHtmlToPdfWithWatermark(html, pdfFilePath, watermark);
            System.out.println("PDF file with watermark generated successfully.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在上面的示例中,我们在 PDF 文件中添加了一个水印,显示为 “Confidential”。我们可以通过 convertHtmlToPdfWithWatermark 方法来生成带水印的 PDF 文件。

总结

本文介绍了如何使用 Java 将 HTML 文件转换为 PDF 文件。通过使用 iText 库,我们可以灵活定制我们需要的 PDF 文件,满足各种需求。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程