java實現html轉pdf,支援中文,css以及中文換行
阿新 • • 發佈:2019-01-08
專案需使用到html轉pdf功能,在網上搜了很多,綜合了不少大神的方法,現在這裡做一個標記,以免自己以後忘記了。
java程式碼
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;
import com.lowagie.text.pdf.BaseFont;
public class IText {
public static void main(String[] args)throws Exception {
String inputFile = "E:/workspace/PDF/WebContent/WEB-INF/signfileInfo.html" ;
String outputFile = "E:/workspace/PDF/WebContent/WEB-INF/signfileInfo.pdf";
OutputStream os = new FileOutputStream(outputFile);
ITextRenderer renderer = new ITextRenderer();
String url = new File(inputFile).toURI().toURL().toString();
renderer.setDocument (url);
// 解決中文支援問題
ITextFontResolver fontResolver = renderer.getFontResolver();
fontResolver.addFont("C:/Windows/Fonts/SIMSUN.TTC", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//解決圖片的相對路徑問題
renderer.getSharedContext().setBaseURL("file:///E:/workspace/PDF/WebContent/WEB-INF/" );
renderer.layout();
renderer.createPDF(os);
os.flush();
os.close();
System.out.println("轉換完成!");
}
}
html程式碼需要嚴格規範,所有標籤都要有對應的/>進行關閉
記得用html包圍,
開始的時候沒有用這個,導致了一個麻煩的問題,還查了好久才發現。
為了支援中文,不僅要在java程式碼中引入字型檔案,還需要在html中引用
body {
font-family: SimSun;
}
原先的core-renderer.jar不支援中文換行功能,有人修改了原始碼
中文換行包
所用的其他幾個jar包分別為:
iText-2.0.8.jar
iTextAsian.jar
iTextAsianCmaps.jar