最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實(shí)現(xiàn)HTML轉(zhuǎn)PDF及合并PDF文件詳細(xì)教程

 更新時(shí)間:2025年07月04日 09:12:42   作者:碼傻啦弟  
之前在工作中遇到過一個(gè)需求,是將用戶填寫的申報(bào),由固定模板的來生成pdf,后來想到先把內(nèi)容生成html,然后再把html格式的內(nèi)容轉(zhuǎn)換成pdf,這篇文章主要介紹了Java實(shí)現(xiàn)HTML轉(zhuǎn)PDF及合并PDF文件的相關(guān)資料,需要的朋友可以參考下

前言

在當(dāng)今數(shù)字化辦公與應(yīng)用開發(fā)的大環(huán)境下,將 HTML 轉(zhuǎn)換為 PDF 格式以及合并多個(gè) PDF 文件的需求愈發(fā)常見。無論是生成電子報(bào)告、合同文檔,還是整合項(xiàng)目資料,這些操作都能極大地提升工作效率與文檔處理的便捷性。Java 作為一門強(qiáng)大且廣泛應(yīng)用的編程語言,為我們實(shí)現(xiàn)這些功能提供了豐富的工具和庫。接下來,我們就詳細(xì)探討如何使用 Java 達(dá)成 HTML 到 PDF 的轉(zhuǎn)換以及 PDF 文件的合并。

一、HTML 轉(zhuǎn) PDF?

(一)使用 iText 庫實(shí)現(xiàn) HTML 轉(zhuǎn) PDF?

iText 是一款功能強(qiáng)大的 Java 庫,廣泛用于處理 PDF 文檔。它能夠輕松地將 HTML 內(nèi)容轉(zhuǎn)換為 PDF 格式,并且支持豐富的樣式和布局設(shè)置。?

1.環(huán)境準(zhǔn)備?

  • 確保你已經(jīng)安裝了 Java Development Kit(JDK),建議使用 JDK 8 或更高版本。?
  • 引入 iText 庫。如果你使用 Maven 項(xiàng)目管理工具,可以在pom.xml文件中添加以下依賴:
    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>html2pdf</artifactId>
        <version>5.5.13.2</version>
    </dependency>

    如果不使用 Maven,你需要手動(dòng)下載 iText 的 JAR 文件,并將其添加到項(xiàng)目的類路徑中。?

2.編寫 HTML 文件?

在進(jìn)行轉(zhuǎn)換之前,先準(zhǔn)備一個(gè)基礎(chǔ)的 HTML 文件,例如index.html,內(nèi)容如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>HTML轉(zhuǎn)PDF示例</title>
</head>
<body>
    <h1>這是一個(gè)測(cè)試標(biāo)題</h1>
    <p>這是一段測(cè)試文本。</p>
</body>
</html>

3.Java 代碼實(shí)現(xiàn)轉(zhuǎn)換?

創(chuàng)建一個(gè) Java 類,例如HtmlToPdfConverter.java,編寫以下代碼實(shí)現(xiàn) HTML 到 PDF 的轉(zhuǎn)換:

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();
        }
    }
}

代碼解釋:?

  • 導(dǎo)入com.itextpdf.html2pdf.HtmlConverter類,該類負(fù)責(zé)執(zhí)行 HTML 到 PDF 的轉(zhuǎn)換操作。?
  • 定義htmlFilePath和pdfFilePath,分別指定源 HTML 文件路徑和目標(biāo) PDF 文件路徑。?
  • 使用HtmlConverter.convertToPdf方法,傳入FileInputStream對(duì)象(用于讀取 HTML 文件)和FileOutputStream對(duì)象(用于寫入生成的 PDF 文件),完成轉(zhuǎn)換過程。?
  • 在try-catch塊中捕獲可能出現(xiàn)的IOException異常,以增強(qiáng)程序的健壯性。?

運(yùn)行上述 Java 程序后,你將在項(xiàng)目目錄下找到生成的output.pdf文件,其內(nèi)容與index.html文件一致。

(二)使用 PD4ML 庫實(shí)現(xiàn) HTML 轉(zhuǎn) PDF?

PD4ML 也是一個(gè)優(yōu)秀的用于將 HTML 轉(zhuǎn)換為 PDF 的 Java 庫,它具有速度快、糾錯(cuò)能力強(qiáng)以及對(duì)中文字體支持良好等優(yōu)點(diǎn)。?

1.引入 PD4ML 庫?

  • 首先需要下載 PD4ML 庫的 JAR 文件,可以從其官方網(wǎng)站獲取。?
  • 將下載的 JAR 文件添加到項(xiàng)目的類路徑中。?

2.處理中文支持(可選步驟,若涉及中文內(nèi)容)?

如果轉(zhuǎn)換的 HTML 內(nèi)容包含中文,為避免中文亂碼問題,需要進(jìn)行一些額外配置。在src根目錄下創(chuàng)建一個(gè)包fonts,在其中新建一個(gè)配置文件pd4fonts.properties,并根據(jù)需要設(shè)置中文字體相關(guān)信息。?

3.Java 代碼實(shí)現(xiàn)?

創(chuàng)建一個(gè)新的 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);
    }
}

代碼說明:?

  • 導(dǎo)入org.zefer.pd4ml包下的相關(guān)類,用于操作 PD4ML 庫。?
  • 在main方法中指定輸出 PDF 文件路徑和輸入 HTML 文件路徑,并調(diào)用htmltopdf方法進(jìn)行轉(zhuǎn)換。?
  • htmltopdf方法中,創(chuàng)建FileOutputStream用于輸出 PDF 文件,實(shí)例化PD4ML對(duì)象。?
  • 通過setPageInsets設(shè)置頁面邊距,setHtmlWidth設(shè)置 HTML 內(nèi)容寬度,setPageHeader設(shè)置頁面頁眉,setPageSize設(shè)置頁面大小為 A4。?
  • 使用useTTF和setDefaultTTFs方法配置字體,以支持中文顯示(這里以楷體為例)。?
  • 調(diào)用render方法,傳入 HTML 文件路徑和FileOutputStream對(duì)象,完成 HTML 到 PDF 的轉(zhuǎn)換。

二、合并 PDF 文件?

在實(shí)際項(xiàng)目中,常常需要將多個(gè) PDF 文件合并成一個(gè)文件,以便于管理和分享。我們可以使用 Apache PDFBox 庫來實(shí)現(xiàn)這一功能。?

(一)環(huán)境配置?

1.確保已經(jīng)安裝好 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 文件并添加到項(xiàng)目類路徑。

(二)Java 代碼實(shí)現(xiàn)合并?

創(chuàng)建一個(gè) Java 類,例如PDFMerger.java,編寫如下代碼實(shí)現(xiàn) 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();
        }
    }
}

代碼解讀:?

  • 導(dǎo)入org.apache.pdfbox.multipdf.PDFMergerUtility和org.apache.pdfbox.pdmodel.PDDocument類,分別用于合并操作和處理 PDF 文檔。?
  • 定義folder變量指定包含待合并 PDF 文件的文件夾路徑,destinationFileName變量指定合并后輸出的 PDF 文件名。?
  • 創(chuàng)建PDFMergerUtility對(duì)象mergePdf,并設(shè)置合并后的文件路徑。?
  • 使用File.listFiles方法獲取指定文件夾下所有擴(kuò)展名為.pdf的文件。?
  • 遍歷找到的 PDF 文件,使用PDDocument.load方法加載每個(gè)文件,并通過mergePdf.addSource方法將其添加到合并列表中。?
  • 最后調(diào)用mergePdf.mergeDocuments方法執(zhí)行合并操作,并在控制臺(tái)輸出合并完成的提示信息。在try-catch塊中捕獲可能出現(xiàn)的IOException異常。

三、總結(jié)

通過以上步驟,我們成功地實(shí)現(xiàn)了使用 Java 將 HTML 轉(zhuǎn)換為 PDF 以及合并多個(gè) PDF 文件的功能。在實(shí)際應(yīng)用中,你可以根據(jù)具體需求對(duì)代碼進(jìn)行進(jìn)一步優(yōu)化和擴(kuò)展,以滿足更復(fù)雜的業(yè)務(wù)場(chǎng)景。例如,在 HTML 轉(zhuǎn) PDF 時(shí),可以對(duì)生成的 PDF 文件進(jìn)行更精細(xì)的樣式定制;在 HTML 轉(zhuǎn) PDF 時(shí),生成條形碼或二維碼到PDF中;在合并 PDF 文件時(shí),可以添加更多的文件篩選條件或?qū)喜㈨樞蜻M(jìn)行控制等。希望本教程能幫助你在 Java 開發(fā)中順利解決相關(guān)文檔處理問題。

到此這篇關(guān)于Java實(shí)現(xiàn)HTML轉(zhuǎn)PDF及合并PDF文件的文章就介紹到這了,更多相關(guān)Java HTML轉(zhuǎn)PDF及合并PDF內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java HttpClient技術(shù)詳解

    Java HttpClient技術(shù)詳解

    Http協(xié)議的重要性相信不用我多說了,HttpClient相比傳統(tǒng)JDK自帶的URLConnection,增加了易用和靈活性(具體區(qū)別,日后我們?cè)儆懻摚?,它不僅是客戶端發(fā)送Http請(qǐng)求變得容易,而且也方便了開發(fā)人員測(cè)試接口(基于Http協(xié)議的),即提高了開發(fā)的效率,也方便提高代碼的健壯性
    2021-10-10
  • Java中的分布式事務(wù)Seata詳解

    Java中的分布式事務(wù)Seata詳解

    這篇文章主要介紹了Java中的分布式事務(wù)Seata詳解,Seata 是一款開源的分布式事務(wù)解決方案,致力于提供高性能和簡(jiǎn)單易用的分布式事務(wù)服務(wù),Seata 將為用戶提供了 AT、TCC、SAGA 和 XA 事務(wù)模式,為用戶打造一站式的分布式解決方案,需要的朋友可以參考下
    2023-08-08
  • Springboot @Autowired和@Resource的區(qū)別解析

    Springboot @Autowired和@Resource的區(qū)別解析

    @Resource是JDK 提供的注解,只是Spring 在實(shí)現(xiàn)上提供了這個(gè)注解的功能支持,本文給大家介紹Springboot @Autowired和@Resource的區(qū)別,感興趣的朋友一起看看吧
    2025-04-04
  • java實(shí)現(xiàn)Img與PDF相互轉(zhuǎn)換

    java實(shí)現(xiàn)Img與PDF相互轉(zhuǎn)換

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)Img與PDF相互轉(zhuǎn)換的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Spring自動(dòng)掃描無法掃描jar包中bean的解決方法

    Spring自動(dòng)掃描無法掃描jar包中bean的解決方法

    在日常開發(fā)中往往會(huì)對(duì)公共的模塊打包發(fā)布,然后調(diào)用公共包的內(nèi)容。然而,最近對(duì)公司的公共模塊進(jìn)行整理發(fā)布后。spring卻無法掃描到相應(yīng)的bean,下面這篇文章主要給大家介紹了關(guān)于Spring自動(dòng)掃描時(shí)無法掃描jar包中bean的解決方法,需要的朋友可以參考下。
    2017-06-06
  • 詳解如何將springboot項(xiàng)目導(dǎo)出成war包

    詳解如何將springboot項(xiàng)目導(dǎo)出成war包

    這篇文章主要介紹了詳解如何將springboot項(xiàng)目導(dǎo)出成war包,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 實(shí)戰(zhàn)分布式醫(yī)療掛號(hào)系統(tǒng)之整合Swagger2到通用模塊

    實(shí)戰(zhàn)分布式醫(yī)療掛號(hào)系統(tǒng)之整合Swagger2到通用模塊

    這篇文章主要為大家介紹了實(shí)戰(zhàn)分布式醫(yī)療掛號(hào)系統(tǒng)之整合Swagger2到通用模塊,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • spring?boot中spring框架的版本升級(jí)圖文教程

    spring?boot中spring框架的版本升級(jí)圖文教程

    Spring Boot是一款基于Spring框架的快速開發(fā)框架,它提供了一系列的開箱即用的功能和組件,這篇文章主要給大家介紹了關(guān)于spring?boot中spring框架的版本升級(jí)的相關(guān)資料,需要的朋友可以參考下
    2023-10-10
  • Java環(huán)境徹底卸載與安裝方法教程(史上最全!)

    Java環(huán)境徹底卸載與安裝方法教程(史上最全!)

    有時(shí)候卸載Java時(shí)真的讓人很煩,明明卸載了但重新安裝Java時(shí)還報(bào)錯(cuò),下面這篇文章主要介紹了Java環(huán)境徹底卸載與安裝方法的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-07-07
  • Spring boot自定義http反饋狀態(tài)碼詳解

    Spring boot自定義http反饋狀態(tài)碼詳解

    這篇文章主要給大家介紹了Spring boot自定義http反饋狀態(tài)碼的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。
    2017-06-06

最新評(píng)論

万源市| 龙口市| 黄石市| 连云港市| 宜良县| 鹤山市| 镇江市| 新河县| 宜良县| 莒南县| 淮滨县| 林口县| 沈阳市| 洛隆县| 修文县| 淳安县| 南华县| 卓资县| 雅安市| 友谊县| 湾仔区| 仁化县| 宝兴县| 舒兰市| 香河县| 岳普湖县| 焦作市| 石景山区| 安丘市| 轮台县| 翁牛特旗| 朔州市| 惠东县| 建昌县| 兖州市| 西乌珠穆沁旗| 永兴县| 法库县| 阿拉善右旗| 贵港市| 牟定县|