私は、1 つのファイル名で SVG 画像を生成するコマンド ライン プログラム用の GUI ラッパー (Java で) を作成しています。
残念ながら、基になるプログラムは新しい画像を生成するときに svg タグを閉じることができないため、次のように FileWriter を使用してファイルを変更しています。
FileWriter fw = new FileWriter(("ImageCache/"+file), true); //true: allows appending to file
BufferedWriter bw = new BufferedWriter(fw);
bw.write("\n</svg>");
bw.close();
fw.close();
Batik は最初の画像を完全にトランスコードしますが、2 番目の画像は svg タグがないために失敗します。
FileWriter がファイルを両方とも更新していることを手動で確認しました。
以下は私のトランスコーダーコードです(入力ファイルとnewFileNameを使用):
org.apache.batik.ext.awt.image.spi.ImageTagRegistry.getRegistry().flushCache();
PNGTranscoder t = new PNGTranscoder();
String svgURI = new File(file).toURL().toString();
TranscoderInput i = new TranscoderInput(svgURI);
OutputStream outStream = new FileOutputStream(newFileName);
TranscoderOutput o = new TranscoderOutput(outStream);
t.transcode(i, o);
outStream.flush();
outStream.close();
更新された SVG イメージが生成されるたびに、新しいトランスコーダ オブジェクトがインスタンス化され、上記のメソッドが実行されます。
画像は常に生成され、トランスコーダーが実行される前に終了タグが追加されるため、トランスコーダーが更新されたファイルを読み取らないように見える理由がわかりません。また、スレッドを数秒間中断しようとしましたが、改善はありませんでした。
任意の提案をいただければ幸いです。