在公司接到一個任務,需要有HTML和PDF兩套模板,進行功能實現。
於是我就到網上搜索資料,看看是否能夠html轉PDF。 果然搜到了很多案例,當然很多一樣的啦。
這裏我將處理demo時遇到的問題和解決方案都大概說下吧!
下面我下貼出demo:
public static boolean convertHtmlToPdf(String inputFile, String outputFile) throws Exception {
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);
//黑體
fontResolver.addFont("C:/Windows/Fonts/SIMHEI.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//楷體
fontResolver.addFont("C:/Windows/Fonts/SIMKAI.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//仿宋
fontResolver.addFont("C:/Windows/Fonts/SIMFANG.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//解決圖片的相對路徑問題
renderer.getSharedContext().setBaseURL("file:/D:/");
renderer.layout();
renderer.createPDF(os);
os.flush();
os.close();
return true;
}
關於中文支持問題:
//宋體
fontResolver.addFont("C:/Windows/Fonts/SIMSUN.TTC", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
html字體設置:
font-family: SimSun;
注意:字體一樣要是英文的:SimSun。而不是中文的 宋體。
關於中文自動換行的問題,如果使用的是原始的core-renderer.jar 包,檢索方式是遇到空格的時候進行檢索是否換行,那麼只要在需要換行的位置加一個空格,這樣的話再轉成PDF的時候檢索到“” “” 並且已經滿一行了。就會進行自動換行。
如果覺得這樣的方法比較麻煩的話,可以去下面的地址去下載 修改源碼後的 core-renderer.jar 包,支持中文檢索換行。但是檢索的方式是一個文字檢索一次。 效率上可能會稍微滿一點,但是基本不影響啦。
資源地址:http://download.csdn.net/detail/uk8692/6632319#comment