1

我一直在为一个命令行程序编写一个 GUI 包装器(在 Java 中),该程序在一个文件名下生成 SVG 图像。

不幸的是,底层程序在生成新图像时无法关闭 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 完美地转码了第一张图像,但第二张图像由于缺少 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 图像时,都会实例化一个新的转码器对象并运行上述方法。

始终生成图像并在转码器运行之前添加结束标记,所以我不知道为什么转码器似乎没有读取更新的文件。我也试过暂停线程几秒钟,没有任何改进。

任何建议,将不胜感激。

4

0 回答 0