我正在开发一个利用 Apache FOP 的 Servlet。
输入的 .fo 文件被转换为 PDF 文件。一些输入文件引用外部图像;如果这些不可用,则转换器会给出如下消息:
07.07.2013 22:53:01 org.apache.fop.fo.flow.ExternalGraphic bind
SCHWERWIEGEND: Image not available: sunset.jpg
为了处理这种情况,我实现了一个 ErrorListener:
import javax.xml.transform.ErrorListener;
class MyErrorListener implements ErrorListener {
int warnings;
int fatals;
int errors;
StringBuilder sb = new StringBuilder();
@Override
public void warning(TransformerException e) throws TransformerException {
warnings++;
sb.append(e.getMessageAndLocation() + "\n");;
}
@Override
public void fatalError(TransformerException e)
throws TransformerException {
fatals++;
sb.append(e.getMessageAndLocation() + "\n");;
}
@Override
public void error(TransformerException e) throws TransformerException {
errors++;
sb.append(e.getMessageAndLocation() + "\n");;
}
String getMessages() {
return sb.toString();
}
}
就在转换开始之前,将此类的一个实例附加到转换器:
TransformerFactory tFactory = TransformerFactory.newInstance();
transformer = tFactory.newTransformer();
MyErrorListener el = new MyErrorListener();
transformer.setErrorListener(el);
transformer.transform(new StreamSource(tempFile2),
new SAXResult(fop.getDefaultHandler()));
但是,转换器不会调用侦听器的任何已实现的错误、警告或致命错误方法,而是继续将错误报告给标准错误。
我什至尝试将侦听器附加到工厂:
tFactory.setErrorListener(el);
但没有成功。
知道我的代码有什么问题吗?还是报告级别以下缺少图像?