0

私はApache FOPを利用するサーブレットに取り組んでいます。

入力 .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()));

ただし、リスナーの実装された error、warning、または fatalError メソッドを呼び出す代わりに、トランスフォーマーは stderr にエラーを報告し続けます。

リスナーをファクトリーにアタッチしようとさえしました:

tFactory.setErrorListener(el);

しかし、成功しませんでした。

私のコードの何が問題なのですか?それとも、不足している画像はレポート レベルより下ですか?

4

1 に答える 1

0

エラーは、XSLT プロセッサではなく、XSL-FO プロセッサから発生しています。Saxon は ErrorListener については知っていますが、エラーについては知りません。FOP はエラーを認識していますが、ErrorListener については認識していません。

于 2013-07-08T07:36:49.323 に答える