苦求解决方案:关于 Java + SVG 开发的一系列问题!!!!(200分)

  • 主题发起人 主题发起人 hunyuan
  • 开始时间 开始时间
H

hunyuan

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟刚转Java,准备开发一套曲线系统,用Java + SVG,Web服务器用Tomcat 4.1.29,现在只有初步的想法:用JSP读Oracle数据并处理,然后用JSP、Servlet或JavaBean调用DOM生成SVG文件(这里怎么也想不通怎么生成)。具体的实现细节想了两周都想不通,小弟对Java了解得太少了,项目又非常急,太需要您的帮助了!!
http://xml.apache.org/batik/ 这个batik是Tomcat中针对SVG的解决方案,不知道怎么用;
http://www.ilog.com/products/jviews/ 这个ilog也不知道sun网站提出来具体做什么用?
下面是摘到的代码,不知道怎么用在Server端?比如JSP中怎么做?

Using the SVGGraphics2D Class
Listing 2. Using the SVGGraphics2D SVG generator (HelloSVGWorld.java)

import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
import java.awt.font.*;
import java.awt.event.*;
import java.io.*;
import org.w3c.dom.*;
import org.apache.xerces.dom.*;
import com.sun.awt.svg.*;
public class HelloSVGWorld extends Component {
String svgMessage = "Hello SVG World";
int width=320, height=250;
Shape diamond = new Polygon(new int[]{120, 210, 300, 210},
new int[]{120, 30, 120, 210},
4);
public Dimension getPreferredSize(){
return new Dimension(width, height);
}
public void paint(Graphics _g){
Graphics2D g = (Graphics2D)_g;
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
// Paint white background
g.setPaint(Color.white);
g.fillRect(0, 0, width, height);
// Paint a circle in blue
g.setPaint(new Color(102, 102, 153));
g.fillOval(30, 30, 180, 180);
// Paint a diamond in black
g.setPaint(Color.black);
g.fill(diamond);
// Draw a string
Font font = new Font("Verdana", Font.BOLD, 20);
g.setFont(font);
g.setPaint(Color.white);
g.drawString(svgMessage, 60, 120);
}
public static void main(String args[]) throws IOException{
// Create an instance of HelloSVGWorld whose paint method
// will be invoked both to render on the screen
// and to generate SVG.
HelloSVGWorld helloSVG = new HelloSVGWorld();
// Create a frame to display our component
Frame frame = new Frame();
// Add component to our frame and fit the
// frame size to its content.
frame.add(helloSVG);
frame.pack();
//
// Generate SVG content.
//

// First, create an instance of org.w3c.dom.Document
// required by the generator.
Documentdo
mFactory = newdo
cumentImpl();
// Second, create an instance of the generator. The
// generator will use thedo
mFactory to create the various
// SVG elements.
SVGGraphics2D svgGenerator = new SVGGraphics2D(domFactory);
// Now, ask the our helloSVG component to render into
// our custom Graphics2D implementation
helloSVG.paint(svgGenerator);
// Optional: set the canvas size
svgGenerator.setSVGCanvasSize(helloSVG.getPreferredSize());

String useCssStr = System.getProperty("useCss", "true");
boolean useCss = useCssStr.equalsIgnoreCase("true");
// Finally, stream out SVG to the standard output
Writer outWriter = new OutputStreamWriter(System.out, "UTF-8");
svgGenerator.stream(outWriter, useCss);
//
// Display component
//
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent evt){
System.exit(0);
}
});
frame.setVisible(true);
}
}
 
用applet来做把 很多证券公司的网站上都是这么做的。
 
applet不理想,毕竟得不到MS的很好支持。
SVG是趋势,是一种非常好的解决方案。
 
终于找到一点资料了:)
http://wwws.sun.com/software/xml/developers/svg/jsp/
源码
<%@ page contentType="image/svg-xml" %>
<%
//
// Extract graphic parameter from request parameter
//

// Title
String title = request.getParameter("title");
title = title!=null?title:"Your Title Here";

// Main color
String color = request.getParameter("color");
color = color!=null?color:"#666699";

...
%>
...
但是在客户端提示是否下载此JSP文件,因为MIME类型设定为contentType="image/svg-xml",怎么解决呢?
 
我觉得可能是IE的问题,你的客户端装有SVG解析器吗
 
SVG解析器已经安装正常,而且可以看Tomcat发布的普通SVG文件
 
有人说是Windows 2000支持不好,我在XP下试验也不行啊
 
具体使用你可以参考cocoon,也是apache.org的,
基本思路是把查询后的结果放到xml里,然后写个xslt用于确定格式的,然后用bakit转为svg,当然不用生成svg文件,这其中的关键是xslt最难写
 
第一段程序不就是把svgdoc当一个graphics来操作就可以生成svg吗?
在Server端,比如JSP中把paint那段代码去掉就行,因为Server没有GUI。
另外对于普通windows应用程序,可以用一个叫svgmaker的软件生成svg,
原理类似于pdfwriter。
 
小弟刚学会用JSP,上面的第二段代码出现问题如下:
<%@ page contentType="image/svg-xml" %>
<%
//
// Extract graphic parameter from request parameter
//
// Title
String title = request.getParameter("title");
title = title!=null?title:"Your Title Here";

// Main color
String color = request.getParameter("color");
color = color!=null?color:"#666699";

...
%>
...
但是在客户端提示是否下载此JSP(SVG)文件,因为MIME类型设定为contentType="image/svg-xml",怎么解决呢?
现在只好用JDOM在服务器端生成SVG文件了
 
后退
顶部