如何将动态生成的SVG包含到Vaadin UI中?

时间:2013-07-24 07:12:39

标签: java-ee svg vaadin

我想知道Vaadin 7.0.5是否可以在vaadin UI中包含SVG图形,而且没有任何附加组件。

我目前正在使用此代码

StreamResource ressourceSVG = new StreamResource(source, "graphe.svg");

Embedded embedded = new Embedded("SVG", ressourceSVG);
embedded.setType(Embedded.TYPE_OBJECT);
embedded.setMimeType("images/svg+xml");

verticalLayout.addComponent(embedded);
setContent(verticalLayout);

有了这个,没有任何反应......只有浏览器中出现“SVG”文字。

我在这个主题上发现的唯一topic日期是3年前的,并没有在书中找到线索。

在API中只存在接口:elemental.svg但它并没有真正帮助......

如果你们有任何线索......会很棒

2 个答案:

答案 0 :(得分:4)

所以,似乎答案是,要在Vaadin 7中显示SVG,应该使用BrowserFrame来显示SVG资源。

使用类似下面的内容,其中sourceSVG是包含SVG数据的streamSource。

StreamResource ressourceSVG = new StreamResource(sourceSVG, "graphe.svg");

BrowserFrame embedded = new BrowserFrame("SVG", ressourceSVG);

verticalLayout.addComponent(component);
verticalLayout.addComponent(embedded);
setContent(verticalLayout);

加载网页后必须重新加载框架,但最终有效

答案 1 :(得分:2)

实际上,至少在版本7.1.7中,您可以直接使用Embedded和SVG。 Book中甚至有一个示例,但它处理的是ThemeResource

// A resource reference to some object
Resource res = new ThemeResource("img/reindeer.svg");

// Display the object
Embedded object = new Embedded("My SVG", res);
object.setMimeType("image/svg+xml"); // Unnecessary
layout.addComponent(object);

但是,StreamResource也可以正常工作,至少使用以下代码段:

Embedded image = new Embedded();
image.setMimeType("image/svg+xml"); //also unnecessary here :p
layout.addComponent(image);
StreamSource source = //define your source
image.setSource(new StreamResource(source, "image.svg"));

(请注意,如果您需要重新生成图片,则必须为filename提供新的,唯一的StreamResource