Java 轉(zhuǎn)換 HTML 到PDF有許多類庫,今天我們介紹一下第三方免費(fèi)的類庫OpenPDF。
1. OpenPDF
OpenPDF是免費(fèi)的Java類庫 ,遵從LGPL 和 MPL協(xié)議,所以基本上能夠可以隨意使用。OpenPDF是基于iTEXT的,目前來說也是維護(hù)的比較好的Java操作PDF的開源軟件。
話不多說,且看所需要的依賴,
< dependency >
< groupId >org.jsoup< /groupId >
< artifactId >jsoup< /artifactId >
< version >1.13.1< /version >
< /dependency >
< dependency >
< groupId >com.openhtmltopdf< /groupId >
< artifactId >openhtmltopdf-core< /artifactId >
< version >1.0.6< /version >
< /dependency >
< dependency >
< groupId >com.openhtmltopdf< /groupId >
< artifactId >openhtmltopdf-pdfbox< /artifactId >
< version >1.0.6< /version >
< /dependency >
jsoup可以將html文件轉(zhuǎn)換成輸入流等,也可以遍歷html的DOM節(jié)點(diǎn),提取元素及樣式等。
2. 示例
本篇示例將以下html文件轉(zhuǎn)換成pdf
< html >
< head >
< style >
.center_div {
border: 1px solid #404e94;
margin-left: auto;
margin-right: auto;
background-color: #f6d0ed;
text-align: left;
padding: 8px;
}
table {
width: 100%;
border: 1px solid black;
}
th, td {
border: 1px solid black;
}
body,html,input{font-family:"msyh";}
< /style >
< /head >
< body >
< div class="center_div" >
< h1 >Hello java North!< /h1 >
< div >
< p >convert html to pdf.< /p >
< /div >
< div >
< table >
< thead >
< th >ROLE< /th >
< th >NAME< /th >
< th >TITLE< /th >
< /thead >
< tbody >
< tr >
< td >MARKSMAN< /td >
< td >ASHE< /td >
< td >THE FROST ARCHER< /td >
< /tr >
< tr >
< td >MAGES< /td >
< td >ANNIE< /td >
< td >THE DARK CHILD< /td >
< /tr >
< tr >
< td >射手< /td >
< td >凱塔琳< /td >
< td >皮城女警< /td >
< /tr >
< /tbody >
< /table >
< /div >
< /div >
< /body >
< /html >
以上html用瀏覽器打開如下,亂碼是因?yàn)橹形淖煮w不識別,下面轉(zhuǎn)換的時(shí)候會加載對應(yīng)的字體來進(jìn)行轉(zhuǎn)換。
使用Java轉(zhuǎn)換HTML到PDF代碼如下:
public class HtmlToPDFOpenSource {
public static void main(String[] args) throws IOException {
HtmlToPDFOpenSource htmlToPDFOpenSource = new HtmlToPDFOpenSource();
htmlToPDFOpenSource.generatePdfByOpenhtmltopdf();
}
private void generatePdfByOpenhtmltopdf() throws IOException {
File inputHtml = new File("E:javaNorthjava-study-notejavaOpenSourcesrcmainresourcestest.html");
//加載html文件
Document document = Jsoup.parse(inputHtml, "UTF-8");
document.outputSettings().syntax(Document.OutputSettings.Syntax.html);
//引入資源目錄,可以單獨(dú)引入css,圖片文件等
String baseUri = FileSystems.getDefault()
.getPath("javaOpenSourcesrcmainresources")
.toUri().toString();
try (OutputStream os = new FileOutputStream("javaOpenSourcesrcmainresourcestestOpenLeagueoflegends1.pdf")) {
PdfRendererBuilder builder = new PdfRendererBuilder();
builder.withUri("javaOpenSourcesrcmainresourcestestOpenLeagueoflegends1.pdf");
builder.toStream(os);
builder.withW3cDocument(new W3CDom().fromJsoup(document), baseUri);
//引入指定字體,注意字體名需要和css樣式中指定的字體名相同
builder.useFont(new File("javaOpenSourcesrcmainresourcesfontsmsyh.ttf"),"msyh",1,BaseRendererBuilder.FontStyle.NORMAL, true);
builder.run();
}
}
}
使用Java代碼轉(zhuǎn)換成PDF如下(示例中使用了微軟雅黑中文字體):
上述html文件中增加如下 外部樣式 :
< link href="style.css" rel="stylesheet" >
并在resources目錄下添加style.css文件,重新生成PDF文件如下。
3. 總結(jié)
本片介紹了使用OpenPDF將html文件轉(zhuǎn)換成PDF文件。同時(shí)也使用了自定義字體,外部樣式。但是以下幾點(diǎn)需要格外注意。
- Java代碼中加載的字體名稱要和HTML引用的CSS樣式中的字體名相同 ({font-family:"msyh";})。
- HTML文件標(biāo)簽節(jié)點(diǎn)必須閉合().否則解析會失敗。
-
開源軟件
+關(guān)注
關(guān)注
0文章
210瀏覽量
15900 -
JAVA
+關(guān)注
關(guān)注
19文章
2966瀏覽量
104700 -
HTML
+關(guān)注
關(guān)注
0文章
278瀏覽量
35205 -
PDF
+關(guān)注
關(guān)注
1文章
168瀏覽量
33691
發(fā)布評論請先 登錄
相關(guān)推薦
評論