자바 AWT/SWT 패널에 OpenOffice 삽입하기



SWT Frame에 OpenOffice를 삽입하여 .doc 문서를 보고있는 화면이다.
기본적으로 AWT 패널에 삽입되고, AWT-SWT 브릿지를 사용해 SWT 프레임에 올린다.
따라서, AWT를 다루는 다른 자바환경(Applet, Swing)에서

  • Haansoft Linux 2005 (Windows도 물론 가능)
  • JDK 1.5.0_05 (1.5 이전 버전은 테스트 못했지만 작동할 듯...)
  • Eclipse 3.1.1
  • OpenOffice 2.0 RC2 (1.X 대 버전에서는 잘 안되는 것 같음)

먼저, 아래의 jar 라이브러리들을 CLASSPATH에 추가해야 한다.
이 jar 파일들은 $OFFICE_HOME/program/classes에서 찾을 수 있다.
- jurt.jar
- officebean.jar
- ridl.jar
- unoil.jar
- juh.jar
- sandbox.jar
Eclipse를 사용할 경우, Project - Properties - Java Build Path 에서 라이브러리를 추가할 수 있다.
SWT를 사용하기 위한 라이브러리 및 런타임 설정은 SWT 사이트를 참조하길 바란다.

아래의 OOoSwtViewer.java는 java.awt.Panel를 상속하고 패널에 OpenOffice 빈(OOoBean) 객체를 삽입하여 오피스 뷰어 클래스를 구현한다.
package ooswtviewer;
 
import java.awt.Panel;
import java.io.IOException;
 
import com.sun.star.comp.beans.NoConnectionException;
import com.sun.star.comp.beans.OOoBean;

import com.sun.star.comp.beans.SystemWindowException;
import com.sun.star.frame.XDesktop;
import com.sun.star.lang.IllegalArgumentException;
import com.sun.star.util.CloseVetoException;
 
public class OOoSwtViewer extends Panel {

public final String SWRITER = "private:factory/swriter";
 
private static final long serialVersionUID = -1408623115735065822;

private OOoBean aBean;
 
public OOoSwtViewer() {
super();
aBean = new OOoBean();
setLayout(new java.awt.BorderLayout());
add(aBean, java.awt.BorderLayout.CENTER);
}
 
public void setDocument(String url) throws
IllegalArgumentException, CloseVetoException,
NoConnectionException, IOException, SystemWindowException {
aBean.loadFromURL(url, null);
aBean.aquireSystemWindow();
}
 
/**
* closes the bean viewer and tries to terminate OOo.
*/

public void terminate() throws NoConnectionException {
setVisible(false);
XDesktop xDesktop = null;
xDesktop = aBean.getOOoDesktop();
aBean.stopOOoConnection();
if (xDesktop != null)
xDesktop.terminate();
}
 
/**
* closes the bean viewer, leaves OOo running.
*/

public void close() {
setVisible(false);
aBean.stopOOoConnection();
}
 
}

OOoSwtSnippet.java는 위의 OOoSwtViewer를 SWT Frame에 올리는 실행 클래스를 구현한다. 맨위의 그림은 이 파일을 컴파일한 후 실행시킨 화면이다.

package ooswtviewer;
 
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.Panel;
 
import javax.swing.JRootPane;
 
import org.eclipse.swt.SWT;
import org.eclipse.swt.awt.SWT_AWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;

import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
 
public class OOoSwtSnippet {
 
private static final String OFFICE_DOCUMENT
= "file:///home/snpe/ThatIsLife.doc";
 
private static final String NEW_WRITTER_DOCUMENT
= "private:factory/swriter";
 
public static void main(String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
 
Composite composite = new Composite(shell, SWT.NO_BACKGROUND
| SWT.EMBEDDED);
 
try {
System.setProperty("sun.awt.noerasebackground", "true");
} catch (NoSuchMethodError error) { }
 
/* Create and setting up frame */
Frame frame = SWT_AWT.new_Frame(composite);
Panel panel = new Panel(new BorderLayout()) {
public void update(java.awt.Graphics g) {
paint(g);
}
};
frame.add(panel);
JRootPane root = new JRootPane();
panel.add(root);
java.awt.Container contentPane = root.getContentPane();
 
shell.setSize(800, 600);
final OOoSwtViewer viewer = new OOoSwtViewer();
contentPane.add(viewer);
 
// viewer.setDocument(NEW_WRITTER_DOCUMENT);
try {
viewer.setDocument(OFFICE_DOCUMENT);
} catch (Exception e) {
e.printStackTrace();
}
 
shell.open();
shell.addDisposeListener(new DisposeListener() {
public void widgetDisposed(DisposeEvent e) {
try {
viewer.close();
} catch (RuntimeException exception) {
exception.printStackTrace();
}
}
});

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

display.dispose();
}
 
}

작성 중...

by 달소년 | 2005/10/13 18:10 | 프로그래밍 | 트랙백 | 덧글(0)

트랙백 주소 : http://lunarboy.egloos.com/tb/737787
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶