在SVG文档中嵌入SVG文档,但保持可访问性

时间:2013-09-27 15:47:13

标签: java image svg embed batik

我需要在另一个SVG文档中包含一个SVG文档(实际上是3个),以便滚动嵌入的SVG文档。

我使用Batik JSVGCanvas在Java应用程序中显示它。由于将该画布放入JScrollPane并将画布的大小设置为非常大的大小会消耗大量内存(JSVGCanvas似乎没有任何内存效率),我想减少SVG的可见部分,使用viewBox属性并使用SVG Scrollbars在文档内滚动。

但似乎通过<image>标记在SVG中嵌入SVG只会将该文档作为图像导入,而不是作为另一个SVG文档导入。甚至不评估<desc><title>标记以提供元素的工具提示。我还需要嵌入式SVG中的动态功能(一些元素必须是可点击的,我为java应用程序中的那些点击提供处理程序)。我还需要在运行时修改嵌入式SVG DOM。我不知道如何从Batik中访问嵌入式SVG。

似乎所有这一切都是不可能的。我误解了<image>标签了吗?还有另一种方法可以在维护动态功能的同时将SVG文档嵌入到另一个SVG文档中吗?

我想做的是这样的事情:

 +-------------------------------------------------------------+
 |+-----------------------------------------------------------+|
 ||                                                           ||
 ||                  upper embedded SVG                       ||
 ||                                                           ||
 |+-----------------------------------------------------------+|
 |+-----------------------------------------------------------+|
 ||                                                           ||
 ||                                                           ||
 ||                                                           ||
 ||                  lower embedded SVG                       ||
 ||                                                           ||
 ||                                                           ||
 ||                                                           ||
 ||                                                           ||
 ||                                                           ||
 |+-----------------------------------------------------------+|
 |+-----------------------------------------------------------+|
 ||<               horizontal scrollbar                      >||
 |+-----------------------------------------------------------+|
 +-------------------------------------------------------------+

滚动条应滚动上部和下部嵌入式SVG的viewBox。但我仍然需要访问这些文档来修改他们的DOM以及动态的需要(对鼠标悬停,点击等做出反应)。

1 个答案:

答案 0 :(得分:1)

您无需使用<image>来嵌入其他SVG。将<svg>置于另一个<svg> <svg id="upper"> ...etc... </svg> <svg id="lower" y="200px"> ...etc... </svg> </svg> 内是合法的。例如:

{{1}}

你试过吗?