Java通过batik和SVGGraphics2D实现读取svg并写入内容生成新的svg

Java通过batik读取解析SVG,并通过SVGGraphics2D实现添加SVG的内容,最后将SVG保存为文件。

PS:网上的各种方法真的像依托答辩,抄来抄去没一个写到点子上的,最终还是看文档实现了。

  1. 添加依赖的pom
<dependency>
    <groupId>org.apache.xmlgraphics</groupId>
    <artifactId>batik-all</artifactId>
    <version>1.16</version>
</dependency>
  1. 实现读取svg并写入一行文字,生成新的svg文件并保存
File inputFile = new File("D:\\input.svg");
File outFile = new File("D:\\output.svg");

String parser= XMLResourceDescriptor.getXMLParserClassName();
SAXSVGDocumentFactory f = new SAXSVGDocumentFactory(parser);
String uri = inputFile.toURI().toString();
SVGDocument svgDocument = f.createSVGDocument(uri);
SVGSVGElement root = svgDocument.getRootElement();

SVGGraphics2D g = new SVGGraphics2D(svgDocument);
Font font  = new Font("微软雅黑",  Font.BOLD , 24);
g.setFont(font);
g.setColor(Color.decode("#000000"));
g.drawString("测试内容", 100, 100);
g.dispose();
root.appendChild(g.getRoot());

TranscoderInput input = new TranscoderInput(svgDocument);
SVGTranscoder t = new SVGTranscoder();
try (OutputStream os = new FileOutputStream(outFile)) {
    OutputStreamWriter writer = new OutputStreamWriter(os, StandardCharsets.UTF_8);
    TranscoderOutput output = new TranscoderOutput(writer);
    t.transcode(input, output);
}

发表评论

[/0o0] [..^v^..] [0_0] [T.T] [=3-❤] [❤.❤] [^v^] [-.0] [!- -] [=x=] [→_→] [><] 更多 »
昵称

抢沙发~