我正在通过以下代码行将 svg 文件加载到我的应用程序中
parser = XMLResourceDescriptor.getXMLParserClassName();
factory = new SAXSVGDocumentFactory(parser);
// ua = new UserAgentAdapter();
// loader = new DocumentLoader(ua);
// ctx = new BridgeContext(ua, loader);
// ctx.setDynamicState(BridgeContext.DYNAMIC);
doc = factory.createSVGDocument(svg.toURI().toString());
generator = new SVGGraphics2D(doc);
该文档是之前使用 SVG 生成器生成的,可以在所有 SVG 浏览器中查看,并且不包含任何错误。
现在我正在更新文档
// 在这里对画布和图像本身进行高度/宽度计算 Dimension d = calculateImageSize(true, true);
System.out.println(" 400 DPI Original width " + d.getWidth()
+ " height " + d.getHeight());
generator.setSVGCanvasSize(d);
Element root = doc.getDocumentElement();
//root.setAttributeNS(null, "viewBox", ("0 0 " + (d.getWidth() + " " + d
// .getHeight())));
NodeList imageList = root.getElementsByTagName("image");
Node imageNode = imageList.item(0);
Element image = (Element) imageNode;
image.setAttributeNS(null, "width", String.valueOf(d.getWidth()));
image.setAttributeNS(null, "height", String.valueOf(d.getHeight()));
updateCanvas();
以下是 updateCanvas 实现
公共无效更新画布(){
Element root = doc.getDocumentElement();
generator.getRoot(root);
canvas.setSVGDocument(doc);
}
现在,当我尝试使用以下方法保存此更新的文档时
public void savePngImage(String pngFile, boolean is400DPI) 抛出 IOException {
OutputStream ostream = null;
try {
System.gc();
ostream = new FileOutputStream(pngFile);
transCoder = new PNGTranscoder();
if (is400DPI) {
transCoder.addTranscodingHint(
ImageTranscoder.KEY_PIXEL_UNIT_TO_MILLIMETER,
new Float(0.0635f));
} else {
transCoder.addTranscodingHint(
ImageTranscoder.KEY_PIXEL_UNIT_TO_MILLIMETER,
new Float(0.3528f));
}
transCoder.addTranscodingHint(PNGTranscoder.KEY_INDEXED,
new Integer(5));
transCoder.addTranscodingHint(ImageTranscoder.KEY_MEDIA, "screen");
TranscoderInput input = new TranscoderInput(canvas.getSVGDocument());
TranscoderOutput output = new TranscoderOutput(ostream);
// perform Transcoding
transCoder.transcode(input, output);
} catch (TranscoderException te) {
te.printStackTrace();
throw new IOException(te.getMessage());
} finally {
ostream.flush();
ostream.close();
}
}
每次运行,程序都会抛出随机异常,
像
* * CSSEngine:异常 property.syntax.error:org.w3c.dom.DOMException:“o”标识符不是“shape-rendering”属性的有效值。
属性值:自动
* CSSEngine:异常 property.syntax.error:org.w3c.dom.DOMException:“”标识符不是“shape-rendering”属性的有效值。
属性值:自动
异常:org.w3c.dom.DOMException org.w3c.dom.DOMException:“”标识符不是“形状渲染”属性的有效值。在 org.apache.batik.css.engine.value.AbstractValueFactory.createInvalidIdentifierDOMException(AbstractValueFactory.java:50) 在 org.apache.batik.css.engine.value.IdentifierManager.createValue(IdentifierManager.java:48) 在 org.apache .batik.css.engine.CSSEngine$1.property(CSSEngine.java:744) 在 org.apache.batik.css.engine.CSSEngine.getCascadedStyleMap(CSSEngine.java:768) 在 org.apache.batik.css.engine。 CSSEngine.getComputedStyle(CSSEngine.java:876) at org.apache.batik.bridge.CSSUtilities.getComputedStyle(CSSUtilities.java:82) at org.apache.batik.bridge.CSSUtilities.convertVisibility(CSSUtilities.java:579) at org .apache.batik.bridge。
*CSSEngine: exception.... org.w3c.dom.DOMException: file:/F:/workspace/MonoGeneiousShoe/src/svg/72DPI/Style-5/Left_Style-5.svg: 属性“shape-rendering”代表一个无效的 CSS 值(“自动”)。原始消息:“”标识符不是“形状渲染”属性的有效值。在 org.apache.batik.css.engine.CSSEngine.getCascadedStyleMap(CSSEngine.java:784) 在 org.apache.batik.css.engine.CSSEngine.getComputedStyle(CSSEngine.java:876) 在 org.apache.batik.bridge .CSSUtilities.getComputedStyle(CSSUtilities.java:82) 在 org.apache.batik.bridge.CSSUtilities.convertVisibility(CSSUtilities.java:579) 在 org.apache.batik.bridge.SVGSVGElementBridge.createGraphicsNode(SVGSVGElementBridge.java:142) 在org.apache.batik.bridge.GVTBuilder.build(GVTBuilder.java:
异常:org.w3c.dom.DOMException org.w3c.dom.DOMException:“o”标识符不是“shape-rendering”属性的有效值。在 org.apache.batik.css.engine.value.AbstractValueFactory.createInvalidIdentifierDOMException(AbstractValueFactory.java:50) 在 org.apache.batik.css.engine.value.IdentifierManager.createValue(IdentifierManager.java:48) 在 org.apache .batik.css.engine.CSSEngine$1.property(CSSEngine.java:744) 在 org.apache.batik.css.engine.CSSEngine.getCascadedStyleMap(CSSEngine.java:768) 在 org.apache.batik.css.engine。 CSSEngine.getComputedStyle(CSSEngine.java:876) at org.apache.batik.bridge.CSSUtilities.getComputedStyle(CSSUtilities.java:82) at org.apache.batik.bridge.CSSUtilities.convertVisibility(CSSUtilities.java:579) at org .apache.batik.bridge。SVGSVGElementBridge.createGraphicsNode(SVGSVGElementBridge.java:142) 在 org.apache.batik.bridge.GVTBuilder.build(GVTBuilder.java:76) 在 org.apache.batik.swing.svg.GVTTreeBuilder.run(GVTTreeBuilder.java:96)错误:null 封闭异常:file:/F:/workspace/MonoGeneiousShoe/src/svg/72DPI/Style-5/Left_Style-5.svg:属性“shape-rendering”表示无效的 CSS 值(“auto”)。原始消息:“”标识符不是“形状渲染”属性的有效值。svg:属性“shape-rendering”表示无效的 CSS 值(“auto”)。原始消息:“”标识符不是“形状渲染”属性的有效值。svg:属性“shape-rendering”表示无效的 CSS 值(“auto”)。原始消息:“”标识符不是“形状渲染”属性的有效值。
*CSSEngine: exception.... org.w3c.dom.DOMException: file:/F:/workspace/MonoGeneiousShoe/src/svg/72DPI/Style-5/Left_Style-5.svg: 属性“shape-rendering”代表一个无效的 CSS 值(“自动”)。原始消息:“o”标识符不是“shape-rendering”属性的有效值。在 org.apache.batik.css.engine.CSSEngine.getCascadedStyleMap(CSSEngine.java:784) 在 org.apache.batik.css.engine.CSSEngine.getComputedStyle(CSSEngine.java:876) 在 org.apache.batik.bridge .CSSUtilities.getComputedStyle(CSSUtilities.java:82) 在 org.apache.batik.bridge.CSSUtilities.convertVisibility(CSSUtilities.java:579) 在 org.apache.batik.bridge.SVGSVGElementBridge.createGraphicsNode(SVGSVGElementBridge.java:142) 在org.apache.batik.bridge.GVTBuilder.build(GVTBuilder.java:76) 在 org.apache.batik.swing.svg.GVTTreeBuilder.run(GVTTreeBuilder.java:96) 错误:空封闭异常:文件:/F:/workspace/MonoGeneiousShoe/src/svg/72DPI/Style-5/Left_Style -5.svg:属性“shape-rendering”表示无效的 CSS 值(“auto”)。原始消息:“o”标识符不是“shape-rendering”属性的有效值。
* CSSEngine:异常 property.syntax.error:org.w3c.dom.DOMException:“lormal”标识符不是“font-style”属性的有效值。
属性值:正常
异常:org.w3c.dom.DOMException org.w3c.dom.DOMException:“lormal”标识符不是“font-style”属性的有效值。在 org.apache.batik.css.engine.value.AbstractValueFactory.createInvalidIdentifierDOMException(AbstractValueFactory.java:50) 在 org.apache.batik.css.engine.value.IdentifierManager.createValue(IdentifierManager.java:48) 在 org.apache .batik.css.engine.CSSEngine$1.property(CSSEngine.java:744) 在 org.apache.batik.css.engine.CSSEngine.getCascadedStyleMap(CSSEngine.java:768) 在 org.apache.batik.css.engine。 CSSEngine.getComputedStyle(CSSEngine.java:876) at org.apache.batik.bridge.CSSUtilities.getComputedStyle(CSSUtilities.java:82) at org.apache.batik.bridge.CSSUtilities.convertVisibility(CSSUtilities.java:579) at org .apache.batik.bridge。
*CSSEngine: exception.... org.w3c.dom.DOMException: file:/F:/workspace/MonoGeneiousShoe/src/svg/72DPI/Style-5/Left_Style-5.svg: 属性“font-style”代表一个无效的 CSS 值(“正常”)。原始消息:“lormal”标识符不是“font-style”属性的有效值。在 org.apache.batik.css.engine.CSSEngine.getCascadedStyleMap(CSSEngine.java:784) 在 org.apache.batik.css.engine.CSSEngine.getComputedStyle(CSSEngine.java:876) 在 org.apache.batik.bridge .CSSUtilities.getComputedStyle(CSSUtilities.java:82) 在 org.apache.batik.bridge.CSSUtilities.convertVisibility(CSSUtilities.java:579) 在 org.apache.batik.bridge.SVGSVGElementBridge.createGraphicsNode(SVGSVGElementBridge.java:142) 在org.apache.batik.bridge.GVTBuilder.build(GVTBuilder.java:ShoeComponentPNGCreator.main(ShoeComponentPNGCreator.java:662) ERROR: null Enclosed Exception: file:/F:/workspace/MonoGeneiousShoe/src/svg/72DPI/Style-5/Left_Style-5.svg: 属性“font-style”代表无效的 CSS 值(“正常”)。原始消息:“lormal”标识符不是“font-style”属性的有效值。org.apache.batik.transcoder.XMLAbstractTranscoder.transcode(XMLAbstractTranscoder.java:142) 在 org.apache.batik 的 com.mmg.app.svg.TiledImageTranscoder.transcode(TiledImageTranscoder.java:69) 的 java.lang.NullPointerException。 transcoder.SVGAbstractTranscoder.transcode(SVGAbstractTranscoder.java:156) 在 com.mmg.app.svg.ShoeComponentPNGCreator.savePngImage(ShoeComponentPNGCreator.java:601) 在 com.mmg.app.svg.ShoeComponentPNGCreator。
有时它说 height 是 0 ,有时它说 stroke-width 不是有效的属性等。
我认为这是与 CSS 引擎相关的问题。我在这里做错了什么?
谢谢你米希尔帕雷克