无法在 Java 中使用 Batik 编辑 SVG?
Unable to edit SVG using Batik in Java?
我有一张学生证 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();
看起来您在这里没有使用任何特定的 SVG 功能,只是一些通用的 XML 解析。使用 createDocument
解析文档的结果是内存中的 DOM,但这不会自动将您的更改写出到文件中。你必须明确地这样做。 Using the org.apache.batik.svggen.XmlWriter
class is one of serializing. 您需要打开一个文件进行写入,并将 FileWriter
与 Document
节点一起传递给它。
我有一张学生证 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();
看起来您在这里没有使用任何特定的 SVG 功能,只是一些通用的 XML 解析。使用 createDocument
解析文档的结果是内存中的 DOM,但这不会自动将您的更改写出到文件中。你必须明确地这样做。 Using the org.apache.batik.svggen.XmlWriter
class is one of serializing. 您需要打开一个文件进行写入,并将 FileWriter
与 Document
节点一起传递给它。