Java实现HTML转PDF及合并PDF文件详细教程

 更新时间:2025年07月04日 09:12:42   作者:码傻啦弟  
之前在工作中遇到过一个需求,是将用户填写的申报,由固定模板的来生成pdf,后来想到先把内容生成html,然后再把html格式的内容转换成pdf,这篇文章主要介绍了Java实现HTML转PDF及合并PDF文件的相关资料,需要的朋友可以参考下

前言

在当今数字化办公与应用开发的大环境下,将 HTML 转换为 PDF 格式以及合并多个 PDF 文件的需求愈发常见。无论是生成电子报告、合同文档,还是整合项目资料,这些操作都能极大地提升工作效率与文档处理的便捷性。Java 作为一门强大且广泛应用的编程语言,为我们实现这些功能提供了丰富的工具和库。接下来,我们就详细探讨如何使用 Java 达成 HTML 到 PDF 的转换以及 PDF 文件的合并。

一、HTML 转 PDF​

(一)使用 iText 库实现 HTML 转 PDF​

iText 是一款功能强大的 Java 库,广泛用于处理 PDF 文档。它能够轻松地将 HTML 内容转换为 PDF 格式,并且支持丰富的样式和布局设置。​

1.环境准备​

  • 确保你已经安装了 Java Development Kit(JDK),建议使用 JDK 8 或更高版本。​
  • 引入 iText 库。如果你使用 Maven 项目管理工具,可以在pom.xml文件中添加以下依赖:
    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>html2pdf</artifactId>
        <version>5.5.13.2</version>
    </dependency>

    如果不使用 Maven,你需要手动下载 iText 的 JAR 文件,并将其添加到项目的类路径中。​

2.编写 HTML 文件​

在进行转换之前,先准备一个基础的 HTML 文件,例如index.html,内容如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>HTML转PDF示例</title>
</head>
<body>
    <h1>这是一个测试标题</h1>
    <p>这是一段测试文本。</p>
</body>
</html>

3.Java 代码实现转换​

创建一个 Java 类,例如HtmlToPdfConverter.java,编写以下代码实现 HTML 到 PDF 的转换:

import com.itextpdf.html2pdf.HtmlConverter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class HtmlToPdfConverter {
    public static void main(String[] args) {
        String htmlFilePath = "index.html";
        String pdfFilePath = "output.pdf";

        try {
            HtmlConverter.convertToPdf(new FileInputStream(htmlFilePath), new FileOutputStream(pdfFilePath));
            System.out.println("PDF文件已成功生成:" + pdfFilePath);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

代码解释:​

  • 导入com.itextpdf.html2pdf.HtmlConverter类,该类负责执行 HTML 到 PDF 的转换操作。​
  • 定义htmlFilePath和pdfFilePath,分别指定源 HTML 文件路径和目标 PDF 文件路径。​
  • 使用HtmlConverter.convertToPdf方法,传入FileInputStream对象(用于读取 HTML 文件)和FileOutputStream对象(用于写入生成的 PDF 文件),完成转换过程。​
  • 在try-catch块中捕获可能出现的IOException异常,以增强程序的健壮性。​

运行上述 Java 程序后,你将在项目目录下找到生成的output.pdf文件,其内容与index.html文件一致。

(二)使用 PD4ML 库实现 HTML 转 PDF​

PD4ML 也是一个优秀的用于将 HTML 转换为 PDF 的 Java 库,它具有速度快、纠错能力强以及对中文字体支持良好等优点。​

1.引入 PD4ML 库​

  • 首先需要下载 PD4ML 库的 JAR 文件,可以从其官方网站获取。​
  • 将下载的 JAR 文件添加到项目的类路径中。​

2.处理中文支持(可选步骤,若涉及中文内容)​

如果转换的 HTML 内容包含中文,为避免中文乱码问题,需要进行一些额外配置。在src根目录下创建一个包fonts,在其中新建一个配置文件pd4fonts.properties,并根据需要设置中文字体相关信息。​

3.Java 代码实现​

创建一个新的 Java 类,例如PD4MLHtmlToPdf.java,编写如下代码:

import org.zefer.pd4ml.PD4ML;
import org.zefer.pd4ml.PD4PageMark;
import org.zefer.pd4ml.PD4Constants;
import java.io.File;
import java.io.FileOutputStream;
import java.awt.*;

public class PD4MLHtmlToPdf {
    public static void main(String[] args) throws Exception {
        File pdfFile = new File("D:/pdf/index.pdf");
        htmltopdf(pdfFile, "D:/pdf/index.html");
    }

    private static void htmltopdf(File outputPDFFile, String inputHTMLFileName) throws Exception {
        FileOutputStream fos = new FileOutputStream(outputPDFFile);
        PD4ML pd4ml = new PD4ML();
        pd4ml.setPageInsets(new Insets(40, 30, 30, 40));
        pd4ml.setHtmlWidth(960);
        PD4PageMark p = new PD4PageMark();
        pd4ml.setPageHeader(p);
        pd4ml.setPageSize(PD4Constants.A4);
        pd4ml.useTTF("java:fonts", true);
        pd4ml.setDefaultTTFs("KaiTi_GB2312", "KaiTi_GB2312", "KaiTi_GB2312");
        pd4ml.enableDebugInfo();
        pd4ml.render("file:" + inputHTMLFileName, fos);
    }
}

代码说明:​

  • 导入org.zefer.pd4ml包下的相关类,用于操作 PD4ML 库。​
  • 在main方法中指定输出 PDF 文件路径和输入 HTML 文件路径,并调用htmltopdf方法进行转换。​
  • htmltopdf方法中,创建FileOutputStream用于输出 PDF 文件,实例化PD4ML对象。​
  • 通过setPageInsets设置页面边距,setHtmlWidth设置 HTML 内容宽度,setPageHeader设置页面页眉,setPageSize设置页面大小为 A4。​
  • 使用useTTF和setDefaultTTFs方法配置字体,以支持中文显示(这里以楷体为例)。​
  • 调用render方法,传入 HTML 文件路径和FileOutputStream对象,完成 HTML 到 PDF 的转换。

二、合并 PDF 文件​

在实际项目中,常常需要将多个 PDF 文件合并成一个文件,以便于管理和分享。我们可以使用 Apache PDFBox 库来实现这一功能。​

(一)环境配置​

1.确保已经安装好 JDK。​

2.引入 Apache PDFBox 库。如果使用 Maven,在pom.xml中添加以下依赖:

<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.26</version>
</dependency>

若不使用 Maven,下载 PDFBox 的 JAR 文件并添加到项目类路径。

(二)Java 代码实现合并​

创建一个 Java 类,例如PDFMerger.java,编写如下代码实现 PDF 文件的合并:

import org.apache.pdfbox.multipdf.PDFMergerUtility;
import org.apache.pdfbox.pdmodel.PDDocument;
import java.io.File;
import java.io.IOException;

public class PDFMerger {
    public static void main(String[] args) {
        String folder = "D:/pdf/";
        String destinationFileName = "mergedTest.pdf";
        PDFMergerUtility mergePdf = new PDFMergerUtility();
        mergePdf.setDestinationFileName(folder + File.separator + destinationFileName);

        try {
            File[] files = new File(folder).listFiles((dir, name) -> name.toLowerCase().endsWith(".pdf"));
            if (files != null) {
                for (File file : files) {
                    PDDocument document = PDDocument.load(file);
                    mergePdf.addSource(document);
                }
            }
            mergePdf.mergeDocuments();
            System.out.println("PDF文件合并完成!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

代码解读:​

  • 导入org.apache.pdfbox.multipdf.PDFMergerUtility和org.apache.pdfbox.pdmodel.PDDocument类,分别用于合并操作和处理 PDF 文档。​
  • 定义folder变量指定包含待合并 PDF 文件的文件夹路径,destinationFileName变量指定合并后输出的 PDF 文件名。​
  • 创建PDFMergerUtility对象mergePdf,并设置合并后的文件路径。​
  • 使用File.listFiles方法获取指定文件夹下所有扩展名为.pdf的文件。​
  • 遍历找到的 PDF 文件,使用PDDocument.load方法加载每个文件,并通过mergePdf.addSource方法将其添加到合并列表中。​
  • 最后调用mergePdf.mergeDocuments方法执行合并操作,并在控制台输出合并完成的提示信息。在try-catch块中捕获可能出现的IOException异常。

三、总结

通过以上步骤,我们成功地实现了使用 Java 将 HTML 转换为 PDF 以及合并多个 PDF 文件的功能。在实际应用中,你可以根据具体需求对代码进行进一步优化和扩展,以满足更复杂的业务场景。例如,在 HTML 转 PDF 时,可以对生成的 PDF 文件进行更精细的样式定制;在 HTML 转 PDF 时,生成条形码或二维码到PDF中;在合并 PDF 文件时,可以添加更多的文件筛选条件或对合并顺序进行控制等。希望本教程能帮助你在 Java 开发中顺利解决相关文档处理问题。

到此这篇关于Java实现HTML转PDF及合并PDF文件的文章就介绍到这了,更多相关Java HTML转PDF及合并PDF内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java客户端调用.NET的WebService实例

    Java客户端调用.NET的WebService实例

    下面小编就为大家带来一篇Java客户端调用.NET的WebService实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • springboot 使用mybatis查询的示例代码

    springboot 使用mybatis查询的示例代码

    这篇文章主要介绍了springboot 使用mybatis查询功能,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • 图解Java排序算法之归并排序

    图解Java排序算法之归并排序

    这篇文章主要为大家详细介绍了Java经典排序算法之归并排序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • 基于StringBuilder类中的重要方法(介绍)

    基于StringBuilder类中的重要方法(介绍)

    下面小编就为大家带来一篇基于StringBuilder类中的重要方法(介绍)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • Java8在遍历集合时删除元素问题解决

    Java8在遍历集合时删除元素问题解决

    本文主要介绍了Java8在遍历集合时删除元素问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • Java中使用装饰设计模式实现动态增强对象功能

    Java中使用装饰设计模式实现动态增强对象功能

    装饰设计模式是Java中一种常用的设计模式,它通过动态地将功能透明地附加到对象上,以扩展对象的功能。装饰设计模式主要应用于需要动态、透明地增强对象功能的场景。在Java中,装饰设计模式可通过继承、接口和代理等方式实现
    2023-04-04
  • 比较Java数组和各种List的性能小结

    比较Java数组和各种List的性能小结

    这篇文章主要是分别对Java数组、ArrayList、LinkedList和Vector进行随机访问和迭代等操作,并比较这种集合的性能。有需要的可以参考借鉴。
    2016-08-08
  • Java中Object类常用的12个方法(小结)

    Java中Object类常用的12个方法(小结)

    Java 中的 Object 方法在面试中是一个非常高频的点,本文主要介绍了Java中Object类常用的12个方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • 深入理解Java设计模式之解释器模式

    深入理解Java设计模式之解释器模式

    这篇文章主要介绍了JAVA设计模式之解释器模式的的相关资料,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解
    2021-11-11
  • 详解Java8如何使用Lambda表达式进行比较

    详解Java8如何使用Lambda表达式进行比较

    Lambda表达式,也可称为闭包,是java8的新特性,作用是取代大部分内部类,优化java代码结构,让代码变得更加简洁紧凑。本文将利用Lambda表达式进行排序比较,需要的可以参考一下
    2022-01-01

最新评论