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

java實現html轉pdf方法步驟

 更新時間:2023年08月01日 10:07:14   作者:白白可以改變  
這篇文章主要給大家介紹了關于java實現html轉pdf方法的相關資料,要將HTML轉換成PDF,我們需要借助Java中的第三方庫,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下

1.需求:

將一個html頁面轉成pdf格式。

2.方法:

在實現之前先考慮一個問題,pdf是前端生成還是后端生成。這里采用pdfbox+itext(PDF文件名可自定義)技術在服務端生成。優(yōu)點:免費,不需要安轉軟件,速度快,對于開發(fā)者而言,開發(fā)中僅需導入相應jar,且易部署。

缺點:對于html標簽比較嚴格。

3.實現:

3.1 需要的jar

itext-2.0.8.jar+pdfbox-2.0.19.jar

3.2 準備好html頁面代碼(注意:這里需要手動指定字體):

sHtml += "<!DOCTYPE html[<!ENTITY nbsp ' '>]>";
	sHtml += "<html>";
	sHtml += "<head>";
	sHtml += "</head>";
	sHtml += "<body style='font-family:SimSun !important;'>";
	sHtml += "<h1>這里是測試PDF代碼部分</h1>";
	sHtml += "</body>";
	sHtml += "</html>";

3.3 服務端開始生成PDF文件:

public static void toPdf(String sHtml) {
		try {
			//創(chuàng)建PDf文件
			ITextRenderer renderer = new ITextRenderer();
			ITextFontResolver fontResolver = renderer.getFontResolver();
			//C:/WINDOWS/Fonts/SimSun.ttc 系統自帶的語言包,直接引用
			fontResolver.addFont("C:/WINDOWS/Fonts/SimSun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
			fontResolver.addFont("C:/WINDOWS/Fonts/Arial.ttf",BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);// 宋體字
			String sDate = new SimpleDateFormat("yyyyMMdd").format(new Date());
    		String sTime = new SimpleDateFormat("HHmmssSSS").format(new Date());
			//指定文件存放路徑
			URL sUrlPath = 當前類名.class.getResource("/");
			String sPath = sUrlPath.toURI().getPath();
			sPath1 = sPath.replace("WEB-INF/classes/", "");
			String sPathFolder = sPath+sDate+"\\";
			File filePath = new File(sPathFolder);
    		if(!filePath.exists()  && !filePath.isDirectory()){
    			filePath.mkdirs();
    		}
    		String sFileName = sDate+sTime+".pdf";
			String sPathSave = sPathFolder+sFileName;
			OutputStream os = new FileOutputStream(sPathSave);
			//使用有setDocumentFromString()方法的jar包
			renderer.setDocumentFromString(sHtml);
			renderer.layout();
			renderer.createPDF(os);
			os.close();
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}

3.4 前端頁面發(fā)起請求,服務端將生成的PDF文件返回。

String sTitle = "測試PDF文件名";
File file = new File(sFileUrl);//這里的sFileUrl即上面PDF保存路徑
	try {
	    OutputStream outputStream = response.getOutputStream();
	     //加載pdf附件到PDF流中
	     PDDocument document = PDDocument.load(new FileInputStream(file));
	    response.reset();
	    response.setContentType("application/pdf;charset=UTF-8");
	    response.setHeader("Content-Disposition", "inline;filename=" + URLEncoder.encode(sTitle, "UTF-8"));
	    response.setContentType("application/pdf;charset=UTF-8");
	    //從PDF流中獲得PDF文檔屬性對象
	    PDDocumentInformation info = document.getDocumentInformation();
	    //設置PDF文檔屬性對象的文件名稱(最重要的環(huán)節(jié))
	    info.setTitle(sTitle);
	    document.setDocumentInformation(info);
	    //修改完直接輸出到響應體中
	    document.save(outputStream);
	    outputStream.close();
	    document.close();
	    out.clear();  
		out = pageContext.pushBody();
	} catch (Exception e) {
	}

完成!

總結

到此這篇關于java實現html轉pdf方法步驟的文章就介紹到這了,更多相關java html轉pdf內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java解決浮點數計算不精確問題的方法詳解

    Java解決浮點數計算不精確問題的方法詳解

    在 Java 中,浮點數計算不精確問題指的是使用浮點數進行運算時,由于浮點數的內部表示方式和十進制數的表示方式存在差異,導致計算結果可能出現誤差,本文就給大家介紹一下Java如何解決浮點數計算不精確問題,需要的朋友可以參考下
    2023-09-09
  • idea誤刪libraries重載的解決方案

    idea誤刪libraries重載的解決方案

    本文分享了作者個人在重載Maven項目時遇到的問題及解決方法,希望能幫助到有類似問題的讀者
    2025-12-12
  • mybatisplus如何根據不同ID批量更新

    mybatisplus如何根據不同ID批量更新

    本文介紹了MyBatis-Plus中使用Wrapper批量更新數據的方法,包括使用UpdateWrapper批量更新相同屬性值、根據ID數組批量更新相同屬性值,以及使用updateBatchById方法批量更新多個屬性值,提供了示例代碼和注意事項
    2026-04-04
  • Java異常Exception詳細講解

    Java異常Exception詳細講解

    異常就是不正常,比如當我們身體出現了異常我們會根據身體情況選擇喝開水、吃藥、看病、等?異常處理方法。?java異常處理機制是我們java語言使用異常處理機制為程序提供了錯誤處理的能力,程序出現的錯誤,程序可以安全的退出,以保證程序正常的運行等
    2022-07-07
  • Java實現猜數字小游戲代碼

    Java實現猜數字小游戲代碼

    大家好,本篇文章主要講的是Java實現猜數字小游戲代碼,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • Java實現字符串大小寫轉換的常用方法

    Java實現字符串大小寫轉換的常用方法

    在 Java 中,字符串大小寫轉換是文本處理的核心操作之一,Java 提供了多種靈活的方式來實現大小寫轉換,適用于不同場景和需求,本文將全面解析大小寫轉換的各種方法,并提供實用代碼示例,需要的朋友可以參考下
    2025-12-12
  • SpringBoot創(chuàng)建RSocket服務器的全過程記錄

    SpringBoot創(chuàng)建RSocket服務器的全過程記錄

    RSocket應用層協議支持 Reactive Streams語義, 例如:用RSocket作為HTTP的一種替代方案。這篇文章主要給大家介紹了關于SpringBoot創(chuàng)建RSocket服務器的相關資料,需要的朋友可以參考下
    2021-05-05
  • Java修飾符 abstract,static,final 的區(qū)別詳解

    Java修飾符 abstract,static,final 的區(qū)別詳解

    以下是對Java修飾符abstract,static,final的區(qū)別進行了詳細的介紹,需要的朋友可以過來參考下
    2013-09-09
  • SpringBoot如何通過配置禁用swagger

    SpringBoot如何通過配置禁用swagger

    這篇文章主要給大家介紹了關于SpringBoot如何通過配置禁用swagger的相關資料,Swagger用來在開發(fā)階段方便前后端分離的項目實戰(zhàn)中,提高前后端人員的工作效率,降低交流成本,但是版本上線之后要是把Swagger帶上去會存在很大的風險,需要的朋友可以參考下
    2023-08-08
  • Spring AOP 切面@Around注解的用法說明

    Spring AOP 切面@Around注解的用法說明

    這篇文章主要介紹了Spring AOP 切面@Around注解的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02

最新評論

玉林市| 柳江县| 濉溪县| 福海县| 梁河县| 湄潭县| 桐乡市| 洛隆县| 余江县| 库车县| 伊金霍洛旗| 旬阳县| 阆中市| 开原市| 全椒县| 宁乡县| 西吉县| 霍林郭勒市| 藁城市| 会泽县| 洪江市| 双峰县| 文登市| 武义县| 乌拉特中旗| 英山县| 石台县| 凤山市| 越西县| 衡阳县| 和龙市| 昔阳县| 石渠县| 邛崃市| 景德镇市| 饶河县| 囊谦县| 淮阳县| 萝北县| 延津县| 陇南市|