【问题标题】:Unable to edit SVG using Batik in Java?无法在 Java 中使用 Batik 编辑 SVG?
【发布时间】:2017-06-07 14:30:31
【问题描述】:

我有一张学生卡 SVG,其中包含我想通过 Java 编辑的名称、id 和其他字段,因为用户使用 GUI 输入它们。

我已经使用 Batik 成功解析了 SVG,但是我在打开 SVG 文件时看不到它所做的更改。

String parser = XMLResourceDescriptor.getXMLParserClassName();
SAXSVGDocumentFactory f = new SAXSVGDocumentFactory(parser);
String uri = "card.svg";
try {
    Document doc = f.createDocument(uri);
    NodeList nodeList = doc.getChildNodes();
    Element svg = doc.getElementById("name");
    svg.setTextContent("Your Name");
    System.out.println(svg.getTextContent());
} catch (IOException e) {
    e.printStackTrace();
}

当我使用

打印出 SVG 元素的值之一时

System.out.println(svg.getTextContent());

它已经改变了,但是当我在记事本中打开 SVG 时,它是一样的。

SVG

<text x="759" y="361" id="name" class="fil3 fnt3">STUDENT</text>

其他人的更新:已解决

File file = new File("new.svg");
FileWriter fWriter = new FileWriter(file);
XmlWriter.writeXml(svg, fWriter, false);
// Most crucial part, It wasn't working just because of flush
fWriter.close();

【问题讨论】:

    标签: java xml svg batik


    【解决方案1】:

    看起来您在这里没有使用任何特定的 SVG 功能,只是一些通用的 XML 解析。使用createDocument 解析文档的结果是内存中的 DOM,但这不会自动将您的更改写入文件。你必须明确地这样做。 Using the org.apache.batik.svggen.XmlWriter class is one of serializing. 您需要打开一个文件进行写入,并将 FileWriter 以及 Document 节点传递给它。

    【讨论】:

    • FileOutputWriter ?
    • 对不起,FileWriter。 (我已经有一段时间没有做任何 Java 了。)
    • 您的更新 #2 对我来说看起来很合适。如果您仍有问题,请在 batik-users 邮件列表中询问。
    猜你喜欢
    • 2011-04-10
    • 2016-03-12
    • 2014-04-06
    • 2012-10-25
    • 1970-01-01
    • 2016-08-30
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多