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

java實(shí)現(xiàn)html轉(zhuǎn)pdf方法步驟

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

1.需求:

將一個(gè)html頁(yè)面轉(zhuǎn)成pdf格式。

2.方法:

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

缺點(diǎn):對(duì)于html標(biāo)簽比較嚴(yán)格。

3.實(shí)現(xiàn):

3.1 需要的jar

itext-2.0.8.jar+pdfbox-2.0.19.jar

3.2 準(zhǔn)備好html頁(yè)面代碼(注意:這里需要手動(dòng)指定字體):

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

3.3 服務(wù)端開始生成PDF文件:

public static void toPdf(String sHtml) {
		try {
			//創(chuàng)建PDf文件
			ITextRenderer renderer = new ITextRenderer();
			ITextFontResolver fontResolver = renderer.getFontResolver();
			//C:/WINDOWS/Fonts/SimSun.ttc 系統(tǒng)自帶的語(yǔ)言包,直接引用
			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 = 當(dāng)前類名.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 前端頁(yè)面發(fā)起請(qǐng)求,服務(wù)端將生成的PDF文件返回。

String sTitle = "測(cè)試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文檔屬性對(duì)象
	    PDDocumentInformation info = document.getDocumentInformation();
	    //設(shè)置PDF文檔屬性對(duì)象的文件名稱(最重要的環(huán)節(jié))
	    info.setTitle(sTitle);
	    document.setDocumentInformation(info);
	    //修改完直接輸出到響應(yīng)體中
	    document.save(outputStream);
	    outputStream.close();
	    document.close();
	    out.clear();  
		out = pageContext.pushBody();
	} catch (Exception e) {
	}

完成!

總結(jié)

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

相關(guān)文章

  • Java解決浮點(diǎn)數(shù)計(jì)算不精確問(wèn)題的方法詳解

    Java解決浮點(diǎn)數(shù)計(jì)算不精確問(wèn)題的方法詳解

    在 Java 中,浮點(diǎn)數(shù)計(jì)算不精確問(wèn)題指的是使用浮點(diǎn)數(shù)進(jìn)行運(yùn)算時(shí),由于浮點(diǎn)數(shù)的內(nèi)部表示方式和十進(jìn)制數(shù)的表示方式存在差異,導(dǎo)致計(jì)算結(jié)果可能出現(xiàn)誤差,本文就給大家介紹一下Java如何解決浮點(diǎn)數(shù)計(jì)算不精確問(wèn)題,需要的朋友可以參考下
    2023-09-09
  • idea誤刪libraries重載的解決方案

    idea誤刪libraries重載的解決方案

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

    mybatisplus如何根據(jù)不同ID批量更新

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

    Java異常Exception詳細(xì)講解

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

    Java實(shí)現(xiàn)猜數(shù)字小游戲代碼

    大家好,本篇文章主要講的是Java實(shí)現(xiàn)猜數(shù)字小游戲代碼,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • Java實(shí)現(xiàn)字符串大小寫轉(zhuǎn)換的常用方法

    Java實(shí)現(xiàn)字符串大小寫轉(zhuǎn)換的常用方法

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

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

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

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

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

    SpringBoot如何通過(guò)配置禁用swagger

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

    Spring AOP 切面@Around注解的用法說(shuō)明

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

最新評(píng)論

沙河市| 普兰店市| 罗江县| 陈巴尔虎旗| 睢宁县| 日土县| 丹凤县| 公安县| 上林县| 抚远县| 陇南市| 诏安县| 商丘市| 神木县| 青田县| 疏勒县| 拜泉县| 汝城县| 长宁县| 西藏| 祁门县| 罗甸县| 正镶白旗| 华宁县| 芦山县| 乐平市| 岳阳县| 锦屏县| 万源市| 通榆县| 定州市| 南丰县| 房产| 阿勒泰市| 明溪县| 屏南县| 桐梓县| 都昌县| 五莲县| 马公市| 台州市|