Many thanks, Ariel!

I will take a try following your advice. If I have any achievement or
difficulties, I will post on this thread and hope you can help me then.
Thank you, it's so kind of  you providing me so many useful information! ;-)

best regards,
Hanbo

On 9/24/07, Ariel Constenla-Haile <[EMAIL PROTECTED]>
wrote:
>
> Hi Hanbo,
> I answer you here, though I think you will have more answers if you send
> your question to [EMAIL PROTECTED]
>
> Hanbo Wang escribió:
> > Hey, guys,
> >
> > I was encountered such a question: I wanted to write a java program to
> > extract the binary ole-object in ODP file and convert them into images.
> I
> > thought I should divided this task into 2 steps:
> >
> > First of all, I should extract the object file from the zipped file.
>
> I do not understand what you want:
>
> 1. "extract the binary ole-object in ODP file" == you want to store a
> copy of the embedded object as an independent file? If so, I think this
> isn't a good approach: if you want to read an embedded
> object's stream you shouldn't treat the document as a zip file with Java
> [N]IO/ZIP API (by the way, this is never a good practice with OOo docs:
> you better use OOo UCB API, for example, for currently open documents:
> css.ucb.TransientDocumentsContentProvider ).
> I think you will find what you need in the module css.embed in
> combination with css.ucb (instead of using Java API).
>
>
> 2. if you ONLY want to "convert" the embedded object to an image format:
> did you think about the attribute  XEmbeddedObjectSupplier2 ::
> ReplacementGraphic ? (not present in every kind of embedded object; for
> example, in a Java Applet, it will be null)
> It will give you access to the XGraphic, then you can store this
> XGraphic using XGraphicProvider::storeGraphic() [1]
>
> > That's
> > easy, but the question is what OO has done to this object. I wanted to
> know
> > the format of the file. Did OO server add some header information, or
> just
> > it was serialized by the programe who created it.
> >
> > And then, I've checked the content.xml, knowing object's clsid, I can
> look
> > up in the registry to know which program created such an object. So that
> I
> > will depend on some Java-Com co-operation projects such as Jacob to
> write
> > some Java codes to manipulate the COM, and finally diplay the object and
> > convert it into image.
> >
> > Can you give me some advice on my ideas, or can you tell me where OO
> > displayed these ole-objects in Impress or other applications.
> >
> > Many thanks!
> >
> > best regars,
> > Hanbo Wang
> > 2007.9.22
> >
>
> I hope this could help you; if not, do not hesitate to answer again,
> (with more details about what you're exactly looking for, please).
>
>
> Bye and luck,
> Ariel.
>
>
> [1] See sample code:
>
> //Start **********************************************************
> /*
>   * EmbeddedObjectsTest.java
>   *
>   * Created on 23.08.2007 - 13:31:04
>   *
>   */
>
> package ar.com.arielconstenlahaile.test.embed;
>
> import com.sun.star.comp.helper.Bootstrap;
> import com.sun.star.uno.XComponentContext;
> import com.sun.star.lang.XMultiComponentFactory;
> import com.sun.star.uno.UnoRuntime;
>
> import com.sun.star.lang.XComponent;
> import com.sun.star.frame.XComponentLoader;
> import com.sun.star.lang.XMultiServiceFactory;
>
> import com.sun.star.text.XTextContent;
> import com.sun.star.text.XTextDocument;
> import com.sun.star.text.XTextRange;
> import com.sun.star.text.XTextCursor;
> import com.sun.star.text.XTextEmbeddedObjectsSupplier;
>
> import com.sun.star.document.XEmbeddedObjectSupplier;
> import com.sun.star.document.XEmbeddedObjectSupplier2;
>
> import com.sun.star.beans.XPropertySet;
> import com.sun.star.beans.PropertyValue;
> import com.sun.star.beans.PropertyState;
> import com.sun.star.container.XNamed;
> import com.sun.star.container.XNameAccess;
>
> import com.sun.star.graphic.XGraphic;
> import com.sun.star.graphic.XGraphicProvider;
>
> import com.sun.star.util.XStringSubstitution;
>
> import com.sun.star.lang.WrappedTargetException;
> import com.sun.star.container.NoSuchElementException;
>
> /**
>   *
>   * @author ArielConstenlaHaile
>   */
> public class EmbeddedObjectsTest {
>
>      private XComponentContext xContext;
>      private XMultiComponentFactory xMCF;
>
>      private XTextDocument xTextDocument;
>      private String formulaName = "OOoMath test";
>      private XGraphic xReplacementGraphic;
>
>
>      public EmbeddedObjectsTest(XComponentContext xContext)
>          throws com.sun.star.uno.Exception {
>
>          this.xContext = xContext;
>          this.xMCF = xContext.getServiceManager();
>
>          xTextDocument = createWriterDoc();
>          createMathFormula();
>          XGraphic xReplacementGraphic = getReplacementGraphic();
>
>          storeGraphic(
>                  xReplacementGraphic,
>                  "OOoMath_Replacement_Graphic_TEST.png");
>
>      }
>
>
>      private XTextDocument createWriterDoc() throws
> com.sun.star.uno.Exception{
>
>          XComponentLoader xDesktopLoader = (XComponentLoader)
>          UnoRuntime.queryInterface(
>                  XComponentLoader.class,
>                  xMCF.createInstanceWithContext(
>                  "com.sun.star.frame.Desktop", xContext));
>          return (XTextDocument)UnoRuntime.queryInterface(
>                  XTextDocument.class,
>                  xDesktopLoader.loadComponentFromURL(
>                  "private:factory/swriter", "_default", 0, new
> PropertyValue[]{}));
>      }
>
>
>      private void createMathFormula() throws com.sun.star.uno.Exception {
>
>          XMultiServiceFactory xDocFactory = (XMultiServiceFactory)
>          UnoRuntime.queryInterface(XMultiServiceFactory.class,
> xTextDocument);
>
>          XTextContent xTextContent = (XTextContent)
>          UnoRuntime.queryInterface(
>                  XTextContent.class,
>                  xDocFactory.createInstance(
>                  "com.sun.star.text.TextEmbeddedObject" ));
>
>          XPropertySet xPropertySet = (XPropertySet)
> UnoRuntime.queryInterface(
>                  XPropertySet.class, xTextContent);
>
>          xPropertySet.setPropertyValue(
>                  "CLSID",
>                  "078B7ABA-54FC-457F-8551-6147e776a997" );
>
>          XNamed xnamed = (XNamed) UnoRuntime.queryInterface(
>                  XNamed.class, xTextContent);
>          xnamed.setName(formulaName);
>
>          XTextCursor xTextCursor =
> xTextDocument.getText().createTextCursor();
>          XTextRange xTextRange = (XTextRange) UnoRuntime.queryInterface(
>                  XTextRange.class, xTextCursor);
>          xTextDocument.getText().insertTextContent(
>                  xTextRange.getStart(), xTextContent, false );
>
>          XEmbeddedObjectSupplier xEmbeddedObjectSupplier =
>                  (XEmbeddedObjectSupplier) UnoRuntime.queryInterface(
>                  XEmbeddedObjectSupplier.class, xTextContent);
>          XComponent xEmbeddedObjectModel =
> xEmbeddedObjectSupplier.getEmbeddedObject();
>
>          XPropertySet xFormulaProperties = (XPropertySet)
> UnoRuntime.queryInterface(
>                  XPropertySet.class, xEmbeddedObjectModel);
>          xFormulaProperties.setPropertyValue(
>                  "Formula",
>                  "{ { 6 over 7  times  8 }  + 5 }  over 10" );
>
>      }
>
>
>      private XGraphic getReplacementGraphic() {
>          XGraphic replacementGraphic= null;
>          try {
>              XTextEmbeddedObjectsSupplier xTextEmbeddedObjectsSupplier =
>                  (XTextEmbeddedObjectsSupplier) UnoRuntime.queryInterface(
>                      XTextEmbeddedObjectsSupplier.class, xTextDocument);
>              XNameAccess xEmbeddedObjectsNameAccess =
>                      xTextEmbeddedObjectsSupplier.getEmbeddedObjects();
>
>              XEmbeddedObjectSupplier2 xEmbeddedObjectSupplier2 =
>                      (XEmbeddedObjectSupplier2) UnoRuntime.queryInterface(
>                      XEmbeddedObjectSupplier2.class,
>                      xEmbeddedObjectsNameAccess.getByName(formulaName));
>              if (xEmbeddedObjectSupplier2 != null){
>                  replacementGraphic =
> xEmbeddedObjectSupplier2.getReplacementGraphic();
>              }
>
>          } catch (NoSuchElementException ex) {
>              ex.printStackTrace();
>          } catch (WrappedTargetException ex) {
>              ex.printStackTrace();
>          } finally {
>              return replacementGraphic;
>          }
>      }
>
>
>      private String getTempDir() throws com.sun.star.uno.Exception {
>          XStringSubstitution xStringSubstitution = (XStringSubstitution)
>              UnoRuntime.queryInterface(
>                  XStringSubstitution.class,
>                  xMCF.createInstanceWithContext(
>                      "com.sun.star.util.PathSubstitution", xContext));
>
>          return xStringSubstitution.getSubstituteVariableValue("$(temp)");
>      }
>
>
>
>      private void storeGraphic(
>                                  XGraphic xReplacementGraphic,
>                                  String fileName
>              ) throws com.sun.star.uno.Exception {
>
>          if (xReplacementGraphic!=null){
>              String tempDir = getTempDir();
>              PropertyValue[] aMediaProperties = {
>                  new PropertyValue(
>                          "URL", 0,
>                          new String(tempDir + "/" + fileName),
>                          PropertyState.DIRECT_VALUE),
>                  new PropertyValue(
>                          "MimeType", 0,
>                          new String("image/png"),
> PropertyState.DIRECT_VALUE)
>              };
>              storeGraphic(
>                      xReplacementGraphic,
>                      aMediaProperties);
>          }
>      }
>
>      private void storeGraphic(
>                                  XGraphic xGraphic,
>                                  PropertyValue[] aMediaProperties
>              ) throws com.sun.star.uno.Exception {
>          XGraphicProvider xGraphicProvider = (XGraphicProvider)
>              UnoRuntime.queryInterface(
>                  XGraphicProvider.class,
>                  xMCF.createInstanceWithContext(
>                      "com.sun.star.graphic.GraphicProvider", xContext));
>          xGraphicProvider.storeGraphic(xGraphic, aMediaProperties);
>      }
>
>
>
>      public static void main(String[] args) {
>          try {
>              XComponentContext xCtxt = Bootstrap.bootstrap();
>              EmbeddedObjectsTest test = new EmbeddedObjectsTest(xCtxt);
>          } catch (java.lang.Exception e){
>              e.printStackTrace();
>          } finally {
>              System.exit( 0 );
>          }
>      }
>
> }
> // End ******************************************************
>
> --
> Ariel Constenla-Haile
> La Plata, Argentina
>
> [EMAIL PROTECTED]
> [EMAIL PROTECTED]
>
> http://www.arielconstenlahaile.com.ar/ooo/
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

Reply via email to