以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 SVG/GML/VRML/X3D/XAML 』  (http://bbs.xml.org.cn/list.asp?boardid=21)
----  [转帖]Adobe SVG via COM/ActiveX - Part 1  (http://bbs.xml.org.cn/dispbbs.asp?boardid=21&rootid=&id=14887)


--  作者:SCYANGYU
--  发布时间:2/28/2005 2:43:00 PM

--  [转帖]Adobe SVG via COM/ActiveX - Part 1
Trying to figure out how to use Adobe SVG via ActiveX/COM, instead of via HTML.

In J++, you can get this to work by creating a form, adding an Adobe SVG ActiveX control, setting the SRC property to a valid SVG path, then calling for example:

Object o = SVGCtl1.getSVGDocument();
com.ms.com.CUnknown unknown = (com.ms.com.CUnknown) o;
Object o2 = Dispatch.call(unknown, "getURL");
MessageBox.show("" + o2.getClass().getName() + ": " + o2);


I just tested using old J++ because it was easy. The real challenge was to do it using SWT/Java... here is an example of how to use the Adobe SVG ActiveX control in SWT. It shows how to call the getSVGDocument method the control and getURL method of the returned SVGDocument.

You may ask why not use Batik if we are using Java, and the answer is the Adobe control is much faster. Nobody uses browsers written in Java for this reason...

ActiveX Support in SWT provides good information, which I used to create this example.


import java.io.*;

import org.eclipse.swt.internal.ole.win32.*;
import org.eclipse.swt.ole.win32.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.*;

public class AxClientTest
{
 public static void main(String[] args)
 {
  Display display = new Display();
  Shell shell = new Shell(display);
  OleFrame frame = new OleFrame(shell, SWT.NONE); 
  frame.setSize(400, 300);
  File file = new File("E:\\DevLibs\\batik-1.5\\samples\\3D.svg"); // path to your SVG here

  OleClientSite clientSite = new OleClientSite(frame, SWT.NONE, file);

  clientSite.doVerb(OLE.OLEIVERB_SHOW);
  OleAutomation automation = new OleAutomation(clientSite);
  Variant v = automation.invoke(0x0000006b); // I looked this up in the ole/com type viewer - it is getSVGDocument

  OleAutomation a = v.getAutomation();
  int[] rgdispid = a.getIDsOfNames(new String[]{"getURL"}); // get the id for "getURL"

  // Note: you can get some of the basic properties here, but if you want to start accessing DOM elements,
  // you have to wait until the control has finished loading or initializing (not sure of the exact point at
  // which it starts working)
  Variant result = a.invoke(rgdispid[0]); // invoke getURL
  System.out.println(result.getString()); // print the URL


  shell.open ();
  while (!shell.isDisposed ()) {
   if (!shell.getDisplay().readAndDispatch ())
    shell.getDisplay().sleep ();
  }
 }
}


http://www.jroller.com/page/kenlars99/20040113


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
58.594ms