java實(shí)現(xiàn)html轉(zhuǎn)pdf方法步驟
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)題指的是使用浮點(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
Java實(shí)現(xiàn)猜數(shù)字小游戲代碼
大家好,本篇文章主要講的是Java實(shí)現(xiàn)猜數(shù)字小游戲代碼,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2022-01-01
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ò)程記錄
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ū)別詳解
以下是對(duì)Java修飾符abstract,static,final的區(qū)別進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下2013-09-09
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ō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02

