我需要将一些html页面转换为pdf。经过一些谷歌搜索后,我决定使用Flying Saurcer来执行它。我使用此代码执行此操作:
out = new BufferedOutputStream(new FileOutputStream("/Users/Developer/test.pdf"));
ITextRenderer renderer = new ITextRenderer();
renderer.getSharedContext().setNamespaceHandler(new XhtmlNamespaceHandler());
renderer.getSharedContext().setUserAgentCallback(new CustomUserAgentCallback(renderer.getOutputDevice()));
renderer.setDocumentFromString(html);
renderer.layout();
renderer.createPDF(out);
CustomUserAgentCallback是:
public class CustomUserAgentCallback extends ITextUserAgent {
public CustomUserAgentCallback(ITextOutputDevice device) {
super(device);
}
/**
* {@inheritDoc}
*/
@Override
protected InputStream resolveAndOpenStream(String uri) {
try {
return new BufferedInputStream(new FileInputStream(resolveURI(uri)));
} catch (FileNotFoundException e) {
XRLog.exception(String.format("Cannot resolve file with uri %s", uri));
return null;
}
}
/**
* {@inheritDoc}
*/
@Override
public String resolveURI(String uri) {
return HttpUtils.getServletAttributes().getRequest().getServletContext().getRealPath("/") + uri;
}
}
因此,resolveURI方法形成服务器上资源(css,images)的有效路径。
但是pdf创建没有格式化,所以样式被忽略以及img。 感谢您的关注(对不起我的英语)