ก่อนที่จะเขียนไฟล์ OpenOffice.org ด้วย Java ได้ก่อนอื่นก็ต้องเข้าใจ API ของ OpenOffice.org ซะก่อนซึ่งถ้าใครเคยเขียน Macro บน OpenOffice.org มาบ้างก็คงจะพอเข้าใจ
วิธีที่นำมาบอกนี้จะเป็นวิธีที่ใช้ eclipse ในการเขียนครับ
ขั้นแรกก็ให้ download eclipse มาก่อนจากนั้นสร้าง Java Project ธรรมดาๆ มาซัก Project ตั้งชื่อตามสะดวกจากนั้นก็ add external jar เข้ามาตามนี้
- juh.jar
- jurt.jar
- ridl.jar
- unoil.jar
- bootstrapconnector.jar สามารถ download ได้จาก ที่นี่
ซึ่งไฟล์ดังกล่าวหาได้จากภายใน folder ที่ติดตั้ง OpenOffice.org
เมื่อ add jar เสร็จแล้วให้สร้าง Class มาซัก Class แล้วใส่ code ตามนี้เลยครับ
// connect to openoffice.org
String exePath = "C:/Program Files/OpenOffice.org 3/program/";
XComponentContext xContext = BootstrapSocketConnector.bootstrap(exePath);
com.sun.star.lang.XMultiComponentFactory xMFC = xContext.getServiceManager();
Object oDesktop = xMFC.createInstanceWithContext("com.sun.star.frame.Desktop", xContext);
XComponentLoader xCLoader = (com.sun.star.frame.XComponentLoader) UnoRuntime.queryInterface(com.sun.star.frame.XComponentLoader.class, oDesktop);
// create openoffice.org writer document
XComponent document = xCLoader.loadComponentFromURL("private:factory/swriter", "_blank", 0, new PropertyValue[0]);
XTextDocument xTextDocument = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, document);
XText xText = xTextDocument.getText();
// create paragraph cursor
XParagraphCursor xParagraphCursor = (XParagraphCursor) UnoRuntime.queryInterface(XParagraphCursor.class, xText.createTextCursor());
// add some text
xText.insertString(xText.getEnd(), "My First OpenOffice Document", false);
// add style
XPropertySet xPropertySet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xParagraphCursor);
xPropertySet.setPropertyValue("ParaStyleName", "Heading 1");
// add some text
xText.insertString(xText.getEnd(), "rThis is the first line in my paragraph. Some more text, just to add some text to this document. ", false);
xPropertySet.setPropertyValue("ParaStyleName", "Text body");
// Add another heading paragraph
xText.insertString(xText.getEnd(), "rSecond heading", false);
xPropertySet.setPropertyValue("ParaStyleName", "Heading 2");
// And another text body paragraph
xText.insertString(xText.getEnd(), "rThis is the second normal paragraph.", false);
xPropertySet.setPropertyValue("ParaStyleName", "Text body");
// save document
XStorable xStorable = (XStorable) UnoRuntime.queryInterface(XStorable.class, document);
PropertyValue[] storeProps = new PropertyValue[0];
xStorable.storeAsURL("file:///d:/first_document.odt", storeProps);
// export document to pdf
storeProps = new PropertyValue[1];
storeProps[0] = new PropertyValue();
storeProps[0].Name = "FilterName";
storeProps[0].Value = "writer_pdf_Export";
xStorable.storeToURL("file:///d:/first_document.pdf", storeProps);
// close document
XCloseable xcloseable = (XCloseable) UnoRuntime.queryInterface(XCloseable.class, document);
xcloseable.close(false);
} catch (Exception e) {
e.printStackTrace();
} catch (BootstrapException e) {
e.printStackTrace();
}
จริงๆ แล้ว bootstrap นั้นไม่จำเป็นต้องระบุ path ไปที่ soffice.exe ครับ แต่เนื่องจาก ผมลองใช้ bootstrap แบบธรรมดาแล้วไม่ work เลย search ดูจึงเจอ solution นี้ขึ้นมาแทนครับ
ตัวอย่างนี้สามารถเอาไป apply เป็นแบบอื่นๆ ได้อีกมากมายครับ
ที่มา
www.it-eye.nl -
openoffice.org forum
Continue Reading...