วันพุธที่ 25 สิงหาคม พ.ศ. 2553

เขียนไฟล์ OpenOffice.org ด้วย Java

Share it Please
ก่อนที่จะเขียนไฟล์ OpenOffice.org ด้วย Java ได้ก่อนอื่นก็ต้องเข้าใจ API ของ OpenOffice.org ซะก่อนซึ่งถ้าใครเคยเขียน Macro บน OpenOffice.org มาบ้างก็คงจะพอเข้าใจ

วิธีที่นำมาบอกนี้จะเป็นวิธีที่ใช้ eclipse ในการเขียนครับ

ขั้นแรกก็ให้ download eclipse มาก่อนจากนั้นสร้าง Java Project ธรรมดาๆ มาซัก Project ตั้งชื่อตามสะดวกจากนั้นก็ add external jar เข้ามาตามนี้
  1. juh.jar
  2. jurt.jar
  3. ridl.jar
  4. unoil.jar
  5. 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

Blogroll

About