在Batik中设置SVG 1.1 doctype(公共和系统ID)



使用Apache Batik(1.14(时,我正试图在SVG输出中获得一个特定的DOCTYPE条目。

一个简单的例子如下:

DOMImplementation domImpl = GenericDOMImplementation.getDOMImplementation();
String svgNS = "http://www.w3.org/2000/svg";
DocumentType docType = domImpl.createDocumentType("svg", "-//W3C//DTD SVG 1.1//EN", "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd");
Document document = domImpl.createDocument(svgNS, "svg", docType);
SVGGeneratorContext ctx = SVGGeneratorContext.createDefault(document);
SVGGraphics2D svgGenerator = new SVGGraphics2D(ctx, false);
Writer out = new OutputStreamWriter(System.out, "UTF-8");
svgGenerator.stream(out, true);

哪个生产:

<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.0//EN'
'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd'>

我希望有更像的东西

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

(基于上的SVG 1.1规范条目https://www.w3.org/TR/SVG11/struct.html#NewDocument)。

如何获得所需的DOCTYPE(理想情况下不需要事后处理XML(?

与其在DOCTYPE代上与Batik斗争,不如跳过它。正如Robert所评论的,它通常被忽略。此外,不建议在SVG中使用DOCTYPE

事实上,SVG工作组成员甚至告诉人们不要使用DOCTYPESVG 1.0和1.1文档中的声明。相反,始终包括根<svg>标签上的versionbaseProfile属性,以及如以下示例所示,为它们分配适当的值。

<svg version="1.1"
baseProfile="full"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:ev="http://www.w3.org/2001/xml-events">

最新更新