public 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); //解决图片的相对路径问题 renderer.getSharedContext().setBaseURL(file:/D:/); renderer.layout(); renderer.createPDF(os); os.flush(); os.close(); return true; }上面这段代码是这样的,输入一个HTML地址URL = inputFile,输入一个要输出的地址,就可以在输出的PDF地址中生成这个PDF。
注意事项:
1.输入的HTML页面必须是标准的XHTML页面。页面的顶上必须是这样的格式:
!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtdhtml xmlns=http://www.w3.org/1999/xhtml并且HTML页面的语法必须是非常严谨的,所有标签都必须闭合等等(由于flying-Saucer做了XML解析的工作,不严谨会报错的。),这是对页面的第一个要求。
2.要用到图片的地方写相对路径的形式,比如:
img src=a.jpg alt=323 width=252 height=80 /而它的图片位置则必须在Java代码中指定。
renderer.getSharedContext().setBaseURL(file:/D:/);
也有另一种方法就是直接在img标签中写绝对路径。
3.Flying-Saucer在解析tiff格式的图片的时候会报错。具体原因我还没找到。希望大家能够指点我。
4.如果在页面中有中文字体的话。必须在HTML代码中的样式中写上某种字体的css,并且必须是用英文的,然后在Java代码中写上对应的文件位置。
ITextFontResolver fontResolver = renderer.getFontResolver(); fontResolver.addFont(C:/Windows/Fonts/SIMSUN.TTC, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);上面的方法是添加了宋体。也可以添加其他字体。
取消
评论