1. 程式人生 > >Java html轉PDF

Java html轉PDF

在公司接到一個任務,需要有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