版本 1.0、1.1 的解决方案:在 fop 1.0 和 1.1 中,方法 setBaseURL() 无法正确处理本地文件,因此您可以使用方法 setURIResolveri 并编写接口 URIResolver 的实现。
1.添加使用import javax.xml.transform.URIResolver;
2.添加主类
private static class LocalResolver implements URIResolver {
private String BaseFolder;
@Override
public Source resolve(String href, String base) throws TransformerException {
File f = new File(BaseFolder + "\\" + href);
if (f.exists())
return new StreamSource(f);
else
throw new TransformerException("File " + f.getAbsolutePath() +" not found!");
}
public LocalResolver(String BaseFolder) {
this.BaseFolder = BaseFolder;
}
}
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out);
3.在调用transformer.transform(src, res)之前添加:
fop.getUserAgent().setURIResolver(new LocalResolver("C:\\Users\\photon\\Downloads\\fop-1.1-bin\\fop-1.1"));