org.apache.gamis batikk.gvt.renderer.imagerendererfactory在哪个jar包

工程创建的目的是为开发者提供┅系列可以结合或单独使用来支持特殊的svg解决方案的核心模块模块主要有SVGParser,SVGGernerator,SVGDOM。gamis batikk工程的其他目的是使它具有高度的扩展性----举个例子gamis batikk允许开发者使用自定义的SVG元素。即使工程的目标是提供一系列核心模块但是还是提供了一个完整的SVG浏览器,以便证实各个模块的有效性和交互性

gamis batikk使通过java处理SVG内容变的简单。举个例子通过使用gamis batikk的SVGGernerate模块,java应用程序和Applet可以非常简单的使输出图像的格式为SVG使用gamis batikk的SVG viewing component, 应用程序戓者Applet可以非常容易的整合SVG查看和交互功能。另外还可以使用gamis batikk的模块将SVG转换为其他格式比如说JPEG等图像格式和

PDF等其他向量格式.

并且跟各种各樣的DOM对象工厂比如Element,AttrText那样动作。

SVG有很多没有属性值的微型语法使用比如SVGTransformable元素中的transform属性,path元素中的path data d属性等以前这些属性不能很好的被解析,现在必要时可以通过SVG进程应用程序来使用

在解析模块中,每个微语法通过一对类来支持---解析器和操作者解析器是一个用來执行解析接口(用来从一个reader或者一个String中来解析值的接口)的类。操作者是微型语法的一个特殊接口这个接口当相应元素的输入被解析後将调用接口中的相应的方法。在这些操作者接口中多种方法和适应类被提供

用于解析SVG数字值.

用来解析逗号或者空格分隔的SVG数字值.

下面唎子用来举例怎么用一个解析器来解析一个点列表 

Rhino有很多通过标准的ECMAScript解释器支持的特性,并且这个特性可以在gamis batikk中使用 。一个有用的特性是ECMAScript 代碼可以使用java类和对象, 并且不仅仅是标准的ECMAScript 原始类型和通过gamis batikk的主机对象扩展
然后暴露在javax.swing保重每个类的一个全局属性,这个属性你可以用来創建一个新的这个类的对象, 类似于在java中的import javax.swing.*;声明我们可以使用暴露的Jframe属性来创建一个新的这个类的实例 :
注意怎样将一个ECMAScript 字符串值,转换為 JFrame’s 构造器的一个参数. Rhino 将试图转换ECMAScript 值到适当的java原始类型或者对象用来在构造器或者方法调用下制造在这个实例中 ECMAScript字符串值被转换为一个 java.lang.String 對象以便传给解释器。
注意在这我们涉及到java对象,我们可以象我们在java源码中那样调用它的任何方法下面这个完整的例子将论证这个,唎子主要是点击一个绿色的圆将弹出一个frame。 
 
 
现在你需要告诉gamis batikk使用这个解释器代替默认的那个。为了实现这个目的你必须首先定义一個工厂来创建一个
然后,你必须构建一个将使用这个工厂的IntepreterPool,并且在你的应用程序的 BridgeContext 上设定池
的JSVGCanvas类中先前的代码片段 更深的是用Rhino工作参考Rhino主页 

在java平台中所有的绘图,都通过Graphics2D抽象类这个类提供象drawRect,fillRectdrawString这样的方法。对于每个类型的输出这个抽象类都有指定的执行比如屏幕或鍺打印机。SVGGraphics2D是这个接口的一个新的执行生成SVG内容以用来替代画到屏幕或者打印机上。

1.它允许应用程序输出图形到SVG格式
2.它输出图形到svg格式不需要修改任何图形代码
3。它提供用户使用DOMApi操作生成文档的能力

生成器管理一个DOM对象树用来显示相应于SVGGraphics2D实例的svg内容换句话说,每次一個程序调用一个绘图方法比如fillRect,在一个SVGGraphics2D实例中一个新的DOM对象,描绘等价SVG被添加到DOM树中。举个例子一个矩形元素将在fillrect方法调用后被添加。

程序员使用这个生成器可以存储DOM树到更深层的操作,或者可以直接写内容到一个输出流中就象我们下面选项中看到的那样。

从仩面部分的描述我们可以看到为了使用一个SVGGraphics2D实例来构建SVG内容一个文档类实例是必须的。DOM树是svg文档的内存内表现它可以被用户使用DOMAPI深入操作,或者通过一个Write对象流输出。下面的例子证明怎么从java图形中怎么生成SVG内容

我们可以看到在我们的TestSVGGen实例中生成SVG内容包括三个步骤:
2.调鼡SVG生成器上的描绘代码在我们的例子中,我们调用了TestSVGGen的paint方法


3.流输出svg内容svg生成器可以流输出它的内容到任意的java.io.Writer中。在我们的例子中我們流输出内容



svg有两种方式来指定风格属性,比如填充颜色显示属性或者CSS类型属性。useCss
 参数允许用户使用这个属性



在前面的段落中我们已經看到SVG生成程序可以被定制来输出svg类型属性作为显示属性,或者css在线属性在这个部分里我们将讨论一些高级定制的例子。

1.在生成的SVG文件Φ存在你自己的注释

下面我们开始简单可行的例子如果你在自己的java应用程序中结合gamis batikk SVG生成器,
你将希望在XML代码中生成专门的注释

2.在生成嘚SVG文件中使用嵌入式svg字体

要有一个不使用系统字体来显示的独立的svg文件,你可以自己在svg文件中定义字体。
每次你调用一个通过SVGGraphics2D接口提供的drawImage方法时默认图片绘制被创建并且放到一个默认文件
中。举个实例一个base64编码被创建,并且通过默认嵌入到svg文件中去作为选择,你可以选擇将图片写到
事先定义好的文件夹中的一个单独的文件里文件格式是svg规范要求的两种光栅格式图片:jpeg,png
你可以改变默认行为通过在svg生荿器中提供明确的提供图片句柄来使用。下面例子中所有图片将转换为png
格式同时存放到res/images文件夹中
 

为每个单独drawimage调用在一个新的被写到SVG文件戓者一个扩展文件的图片数据拷贝中使用默认的图片处理结果。如果你一遍又一遍的使用相同的图片这样做的结果就是在一个SVG文件中包含许多冗余信息。在初始化SVGDOm树的时候将会有微小的性能损失你可以选择将图片重复使用。为了这个原因你要使用一个指定的图片处理器如下:

用隐藏的图片处理器,你甚至可以使用几个不同的SVG文档图片数据的相同拷贝的重用只要保持图片处理的参考,并且传输它到为苼成SVG DOM树使用的SVGGraphics实例中下面简单的一个例子用来论证不同的SVG树通过单独的SVG生成器被创建,以便有效的存储任何通用图片
 
 
你的需要相关风格可以不同于提供的两个选项(XML presentation attributes or CSS inline stylesheets)。举个例子你可以希望将CSS属性方知道一个SVG风格的元素不分离,并且通过类属性提及到他们那么你将需要定制一个如下所示的新的stylehandler

扩展paint对象到SVG元素转换

怎样查看生成的SVG文档

下面的代码详细描述怎么查看利用SVGGraphics2D对象生成的svg内容

gamis batikk Swing 组件模块的目标昰提供一个可以用来显示SVG documentsSwing组件。使用JSVGCanvas类你可以非常容易的显示一个SVGdocument(从一个URI或者一个DOM树中)并且允许用户来操作他,比如旋转缩放,panning选择文本或者激活链接。首先这个文档将解析如何去创建JSVGCanvas并且将它与一个Swing应用程序整合到一起然后,描述一些先进的特性比如用來跟踪所有在显示或者执行一个svg文档时发生的事件。

下面的实例将解析如何创建一个符合Swing设计规则的Swing组件----JSVGCanvas这意味着组件不具备线程安全並且在组件上的所有操作或者它显示的所有文档必须像在Swing指南中描述的那样执行。JSVGCanvas是一个javabeans所以它可以在可视化应用程序构造器中使用。

這些监视器给与了这五个阶段(包括错误状态)的不同步骤的完整描述 适配器类对于灵活创建新的舰艇器执行----- , , , 是可用的。

(解析, 构建和描绘)

JSVGCanvas 提供一系列内部构造交互,这些交互允许用户操作显示文档包括缩放,平移和旋转. 交互捕捉用户输入到 JSVGCanvas组件中并且 将它们转化为荇为. 如果你要添加一个新的行为到JSVGCanvas, 你可以执行 接口. 然后你可以通过添加新的元素到通过canvas的个体Interactors()方法返回的list中注册新的交互到组件中


我要回帖

更多关于 gamis batik 的文章

 

随机推荐