从URI加载SVG文件获得不同的结果

时间:2018-12-20 04:52:50

标签: java svg uri filechooser batik

背景

JavaFX程序MyApp将导入SVG图像,从文件中解析变换和形状信息,并在扩展JavaFX Canvas的类中显示形状。产生奇怪结果的部分是在初始阶段,获取SVG图片的文件系统URI并进行解析。

奇怪的是,我有两种做同一件事的方法,但是其中一种有效(使用FileChooser),而另一种无效(使用类加载器MyApp.class.getResource(pathString))。两者都为同一个文件生成有效的URI,并且两个URI都被馈送到蜡染SAXSVGDocumentFactory

我已经在两个URI上使用FileReader进行了检查,以确保从两个URI读取相同的文本。

问题代码(简体)

FileChooser importer = new FileChooser();

URI uriBad = MyApp.class.getResource(“my_file.svg”).toURI();
URI uriGood = importer.showOpenDialog(myJavafxStage).toURI();

SAXSVGDocumentFactory documentFactory = new SAXSVGDocumentFactory(XMLResourceDescriptor.getXMLParserClassName());

SVGDocument vectorDocumentBad = documentFactory.createSVGDocument(uriBad);
SVGDocument vectorDocumentGood = documentFactory.createSVGDocument(uriGood);

我希望能够相同地解析vectorDocumentBadvectorDocumentGood,但是使用相同的解析函数获得的转换信息对于创建的前一个文档是错误的,对应于{{1 }}。

来自错误URI的输出

uriBad

良好URI的输出

PARSING SVG
NODE_RootGraphicsNode without style or transform info
GROUP_RootGraphicsNode: 0.0,0.0
    GROUP_CanvasGraphicsNode: NaN,NaN
        SHAPE_ShapeNode: NaN,NaN
        SHAPE_ShapeNode: NaN,NaN
        SHAPE_ShapeNode: NaN,NaN
        SHAPE_ShapeNode: NaN,NaN
        SHAPE_ShapeNode: NaN,NaN
        SHAPE_ShapeNode: NaN,NaN
        ...

SVG文档

PARSING SVG
NODE_RootGraphicsNode without style or transform info
GROUP_RootGraphicsNode: 0.0,0.0
    GROUP_CanvasGraphicsNode: 164.0199324823223,-6.723440123593414
        SHAPE_ShapeNode: 164.0199324823223,-6.723440123593414
        SHAPE_ShapeNode: 164.0199324823223,-6.723440123593414
        SHAPE_ShapeNode: 164.0199324823223,-6.723440123593414
        SHAPE_ShapeNode: 164.0199324823223,-6.723440123593414
        SHAPE_ShapeNode: 164.0199324823223,-6.723440123593414
        ...

1 个答案:

答案 0 :(得分:0)

错误警报!当我尝试修改从SVG文件读取的转换值时,问题实际上并没有出现在我认为的位置,方法调用链中的许多步骤都已完成。我基本上是在尝试获取JavaFX窗格的尺寸,而该尺寸还没有任何尺寸,然后将其未定义值乘以SVG转换以进行显示。

所以我基本上是在问一个错误的问题。