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

Java中將Html轉(zhuǎn)換為PDF的方法和步驟

 更新時間:2023年06月15日 10:44:25   作者:掉頭發(fā)的王富貴  
這篇文章主要介紹了Java中如何將Html轉(zhuǎn)換為PDF的方法,文中有相關(guān)的代碼示例和步驟講解,感興趣的同學可以參考閱讀

Html分兩種情況轉(zhuǎn)換為Pdf:

第一種:html的文件

第二鐘:html格式的字符串

我們先來講一下第一種情況: 1.市面上有很多的html轉(zhuǎn)pdf的方法,但是不是受限于中文的限制就是受限于css樣式的丟失或者是對html的要求太嚴格。 所以我在做這個教程的時候找到了一個非常厲害的一個組件首先看一下他的官網(wǎng): e-iceblue 他有商業(yè)版本和免費的版本,商業(yè)版本沒購買之前是有水印的,但是可以轉(zhuǎn)換10頁,免費版本是沒有水印的,但是只支持轉(zhuǎn)換前三頁。結(jié)合教程使用,我們使用他的免費版本,首先第一步導入他的jar包:

<dependency>
            <groupId> e-iceblue </groupId>
            <artifactId>spire.doc.free</artifactId>
            <version>3.9.0</version>
        </dependency>

但是中央倉庫是沒有這個jar包的,所以我們還需要加一個他的jar包倉庫地址:

    <repositories>
        <repository>
            <id>com.e-iceblue</id>
            <url>http://repo.e-iceblue.cn/repository/maven-public/</url>
        </repository>
    </repositories>

2.第二步我們使用一下方式讀取html文件的內(nèi)容:

public class HtmlToPDFUtil {
 public static void main(String[] args) throws IOException{
        String inputHtml = "C:\\InputHtml.txt";
        //新建Document對象
        Document doc = new Document();
        //添加section
        Section sec = doc.addSection();
        String htmlText = readTextFromFile(inputHtml);
        //添加段落并寫入HTML文本
        sec.addParagraph().appendHTML(htmlText);
        //將文檔另存為PDF
        doc.saveToFile("C:\\HTMLstringToPDF.pdf", FileFormat.PDF);
        doc.dispose();
    }
 public static String readTextFromFile(String fileName) throws IOException {
        StringBuffer sb = new StringBuffer();
        BufferedReader br = new BufferedReader(new FileReader(fileName));
        String content;
        while ((content = br.readLine()) != null) {
            sb.append(content);
        }
        return sb.toString();
    }
}

這個時候就會在c盤目錄下生成InputHtml.txt對應(yīng)的HTMLstringToPDF.pdf文件 第二種方法,html為文本格式的情況: 1.導入上的jar包之后之間將html的文本內(nèi)容賦值給htmlTest

 public static void main(String[] args) throws IOException{
        //新建Document對象
        Document doc = new Document();
        //添加section
        Section sec = doc.addSection();
        String htmlText = " <tr>\n" +
                "        <td colspan=\"8\">\n" +
                "          <div class=\"yiban\">\n" +
                "            <span class=\"jiachu\">聯(lián)系電話:<span>18888888888</span></span>\n" +
                "          </div>\n" +
                "          <div class=\"yiban\">\n" +
                "            <span class=\"jiachu\">送貨單號:</span><span>1567894</span>\n" +
                "          </div>\n" +
                "        </td>\n" +
                "      </tr>";
        //添加段落并寫入HTML文本
        sec.addParagraph().appendHTML(htmlText);
        //將文檔另存為PDF
        doc.saveToFile("C:\\HTMLstringToPDF.pdf", FileFormat.PDF);
        doc.dispose();
    }

這個情況也是一樣的

拓展:將生成的pdf文件返回給前端以供下載

需要一下的代碼段,直接貼出來供大家參考:

 public static void downloadPdf(String fileName, String path) {
        ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletResponse response = requestAttributes.getResponse();
        response.setContentType("application/force-download");
        try {
            response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("utf-8"), "ISO8859-1"));
        } catch (Exception e) {
            e.printStackTrace();
        }
        File file = new File(path);
        InputStream is = null;
        ServletOutputStream os = null;
        try {
            is = new FileInputStream(file);
            os = response.getOutputStream();
            int b;
            while ((b = is.read()) != -1) {
                os.write(b);
            }
        } catch (FileNotFoundException e) {
            ExceptionUtils.logError(e);
        } catch (IOException e) {
            ExceptionUtils.logError(e);
        } finally {
            try {
                if (null != os) {
                    os.close();
                }
                if (null != is) {
                    is.close();
                }
            } catch (IOException e) {
                ExceptionUtils.logError(e);
            }
        }
    }

這段Java代碼演示了如何從本地服務(wù)器下載PDF文件并強制用戶下載。在此代碼中,通過ServletRequestAttributes獲取當前請求的HttpServletResponse對象,并設(shè)置響應(yīng)的content-typeContent-Disposition頭信息,強制將網(wǎng)頁作為附件進行下載保存。

接著,使用 FileInputStream 從指定路徑打開該文件,并從響應(yīng)對象獲取輸出流 ServletOutputStream,將文件內(nèi)容通過循環(huán)一個字節(jié)一個字節(jié)讀取寫入輸出流中,最終實現(xiàn)文件的下載。循環(huán)的過程中沒有直接按塊大小讀取并寫入,可能會對操作系統(tǒng)產(chǎn)生一些額外的負載,但是其功能簡單易懂,可以適用于小型文檔或者測試用例場景等;如果文件較大,可以改變循環(huán)體來調(diào)用更高效的I/O操作API實現(xiàn)數(shù)據(jù)的分塊傳輸,避免內(nèi)存泄漏。

最后在finally塊中關(guān)閉輸入和輸出流,釋放資源,防止出現(xiàn)問題可能導致的文件描述符泄露等安全隱患。

需要注意的是,在設(shè)定Content-Disposition頭信息時有編碼轉(zhuǎn)換的處理,確保整個文件名不會受到URL編碼而導致亂碼問題。

使用該方法:

HtmlToPDFUtil.downloadPdf(fileName,tmplPath+fileName);

這樣就會將pdf文件作為response返回給前端,前端做對應(yīng)的操作就能將文件下載下來。

到此這篇關(guān)于Java中將Html轉(zhuǎn)換為PDF的方法和步驟的文章就介紹到這了,更多相關(guān)Java Html轉(zhuǎn)換為PDF內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何使用Idea搭建全注解式開發(fā)的SpringMVC項目

    如何使用Idea搭建全注解式開發(fā)的SpringMVC項目

    這篇文章主要介紹了如何使用Idea搭建全注解式開發(fā)的SpringMVC項目,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • echarts圖表導出excel示例

    echarts圖表導出excel示例

    這篇文章主要介紹了echarts圖表導出excel示例,需要的朋友可以參考下
    2014-04-04
  • Java通過MyBatis框架對MySQL數(shù)據(jù)進行增刪查改的基本方法

    Java通過MyBatis框架對MySQL數(shù)據(jù)進行增刪查改的基本方法

    MyBatis框架由Java的JDBC API進一步封裝而來,在操作數(shù)據(jù)庫方面效果拔群,接下來我們就一起來看看Java通過MyBatis框架對MySQL數(shù)據(jù)進行增刪查改的基本方法:
    2016-06-06
  • Mybatis攔截器實現(xiàn)數(shù)據(jù)權(quán)限詳解

    Mybatis攔截器實現(xiàn)數(shù)據(jù)權(quán)限詳解

    這篇文章主要介紹了Mybatis攔截器實現(xiàn)數(shù)據(jù)權(quán)限詳解, 通過Mybatis攔截器我們可以攔截某些方法的調(diào)用,我們可以選擇在這些被攔截的方法執(zhí)行前后加上某些邏輯,需要的朋友可以參考下
    2023-11-11
  • Mybatis-plus基于redis實現(xiàn)二級緩存過程解析

    Mybatis-plus基于redis實現(xiàn)二級緩存過程解析

    這篇文章主要介紹了Mybatis-plus基于redis實現(xiàn)二級緩存過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • Java實現(xiàn)簡單的日歷界面

    Java實現(xiàn)簡單的日歷界面

    這篇文章主要為大家詳細介紹了Java實現(xiàn)簡單的日歷界面,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • springboot集成開發(fā)實現(xiàn)商場秒殺功能

    springboot集成開發(fā)實現(xiàn)商場秒殺功能

    這篇文章主要介紹了springboot集成實現(xiàn)商品秒殺功能,秒殺系統(tǒng)業(yè)務(wù)流程,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • 淺談Mybatis之參數(shù)傳遞的幾種姿勢

    淺談Mybatis之參數(shù)傳遞的幾種姿勢

    在mybatis的日常開發(fā)中,mapper接口中定義的參數(shù)如何與xml中的參數(shù)進行映射呢?本文就詳細的介紹一下,感興趣的可以了解一下
    2021-09-09
  • Java實現(xiàn)蘿卜勇者游戲的示例代碼

    Java實現(xiàn)蘿卜勇者游戲的示例代碼

    《蘿卜勇者》是由國內(nèi)玩家自制的一款獨立游戲,玩家扮演蘿卜勇士闖關(guān),打敗各種邪惡的敵人,獲得最后的勝利。本文將利用Java實現(xiàn)這一游戲,感興趣的可以了解一下
    2022-02-02
  • SpringBoot DBUnit 單元測試(小結(jié))

    SpringBoot DBUnit 單元測試(小結(jié))

    這篇文章主要介紹了SpringBoot DBUnit 單元測試(小結(jié)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09

最新評論

留坝县| 右玉县| 黄平县| 怀安县| 盐津县| 根河市| 黄石市| 新化县| 宁河县| 房产| 丰城市| 龙岩市| 忻州市| 临沭县| 阳城县| 望谟县| 铜鼓县| 介休市| 溆浦县| 海淀区| 大英县| 安吉县| 四子王旗| 辉南县| 河西区| 北碚区| 黄山市| 宣武区| 延庆县| 即墨市| 高雄市| 简阳市| 巩留县| 周宁县| 镇雄县| 临漳县| 龙里县| 时尚| 民勤县| 静海县| 石泉县|