Java使用Flying Saucer實現HTML代碼生成PDF文檔

一、須要的jar包:org.xhtmlrenderer.flying-saucer-pdf-itext5,Maven依賴以下:html

 1 <dependency>
 2 <groupId>org.xhtmlrenderer</groupId>
 3 <artifactId>flying-saucer-pdf-itext5</artifactId>
 4 <version>9.0.7</version>
 5 </dependency>

 

二、中文支持數組

因爲HTML代碼中存在中文,須要添加中文支持,須要把須要的字體文件添加到項目中app

三、轉換PDF主代碼ide

 1 /**
 2 * HTML代碼轉PDF文檔
 3 * 
 4 * @param content 待轉換的HTML代碼
 5 * @param storagePath 保存爲PDF文件的路徑
 6 */
 7 @Override
 8 public void parsePdf(String content, String storagePath) {
 9 FileOutputStream os = null;
10 try {
11 File file = new File(storagePath);
12 if(!file.exists()) {
13 file.createNewFile();
14 }
15 os = new FileOutputStream(file);
16 
17 ITextRenderer renderer = new ITextRenderer();
18 //解決中文支持問題
19 ITextFontResolver resolver = renderer.getFontResolver();
20 resolver.addFont("/static/font/ARIALUNI.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
21 renderer.setDocumentFromString(content);
22 // 解決圖片的相對路徑問題,圖片路徑必須以file開頭
23 // renderer.getSharedContext().setBaseURL("file:/");
24 renderer.layout();
25 renderer.createPDF(os);
26 
27 } catch (DocumentException e) {
28 e.printStackTrace();
29 } catch (IOException e) {
30 e.printStackTrace();
31 }finally {
32 if(null != os) {
33 try {
34 os.close();
35 } catch (IOException e) {
36 e.printStackTrace();
37 }
38 }
39 }
40 }

 

四、若是從文件中讀取HTML代碼,須要使用InputStream進行讀取,不要使用FileReader讀取,不知道爲何,使用FileReader讀取的內容解析會錯誤字體

1 StringBuilder content = new StringBuilder();
2 byte[] bys = new byte[1024];
3 int len;
4 in = new BufferedInputStream(new FileInputStream(htmlFilePath));
5 while ((len = in.read(bys)) != -1) {
6 content.append(new String(bys, 0, len));
7 }

 五、若是想把生成PDF內容返回爲byte數組,能夠在調用renderer.createPDF(os)方法時,傳入的是ByteArrayOutputStream,而後調用輸出流的toByteArray便可。ui

相關文章
相關標籤/搜索