Hello Jaime,


I want to export some flowcharts I've done with OOoDraw to html, preserving links. Unfortunately, the slides are exported as plain images.

I want to develop this functionality, using image maps in html for adding the links where they belong. I was thinking about working on the export filter, but I haven't done anything like this before. I guess a macro would work as well, which would lead me to unearth my programming neurons from college... ;-)

Are these alternatives feasible? Any suggestions?

As the export to draw shapes is a desireable goal for the exisiting XHTML filter as well, I recommend that to try to improve this filter, instead of creating a macro, so everybody may gain from your efforts.


As we already found out, the draw images are not pure SVG images nor would any SVG images that would be exported to XHTML been shown in common browsers without a plugin. Therefore the best thing seems to export the draw objects as images.
The creation of an extra folder containing these images, close to the created XHTML document seem reasonable, similar to the saving of website functionality provided by browsers.


You might accomplish the saving of draw images (XShape) using the OOo API, as the Component calling the filter knows about the office and the document to be transformed (Some API basic: a document contains a collection of pages, each page contains a collection of shapes, which can be saved to an arbitrary image format).

This saving mechanism might even be triggered once from within the XSL transformation, when a draw image is encontered.

If you are interested, I going to provide you with more detailed information.

I found a SDK example, which basically do what you need.
It's the examples\DevelopersGuide\Drawing\GraphicExportDemo.java
A small adaptino is needed. Instead of saving a XPage, you have to iterate over the XShapes and save them by name (or in case they are without name, generate one).
I tested it successfully for OOo2.0beta, but you may integrate the changes in the OOo1.x version as well.


Find the source attached.

Regards,
Svante





/*************************************************************************
 *
 *  $RCSfile: GraphicExportDemo.java,v $
 *
 *  $Revision: 1.5 $
 *
 *  last change: $Author: rt $ $Date: 2005/01/31 16:22:52 $
 *
 *  The Contents of this file are made available subject to the terms of
 *  the BSD license.
 *
 *  Copyright (c) 2003 by Sun Microsystems, Inc.
 *  All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions
 *  are met:
 *  1. Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *  2. Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution.
 *  3. Neither the name of Sun Microsystems, Inc. nor the names of its
 *     contributors may be used to endorse or promote products derived
 *     from this software without specific prior written permission.
 *
 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 *  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
 *  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
 *  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
 *  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 *************************************************************************/

// __________ Imports __________

import com.sun.star.uno.UnoRuntime;
import com.sun.star.lang.XComponent;

import com.sun.star.beans.PropertyValue;

import com.sun.star.container.XIndexAccess;
import com.sun.star.container.XNamed;

import com.sun.star.document.XExporter;
import com.sun.star.document.XFilter;

import com.sun.star.drawing.XDrawPage;

// __________ Implementation __________

/** text demo
    @author Sven Jacobi
 */

public class GraphicExportDemo
{
    public static void main( String args[] )
    {
                if ( args.length < 3 )
                {
                        System.out.println( "usage: GraphicExportDemo SourceURL 
DestinationURL PageIndexToExport" );
            System.exit(1);
                }

        XComponent xComponent = null;
        try
        {
            // get the remote office context of a running office (a new office
            // instance is started if necessary)
                        com.sun.star.uno.XComponentContext xOfficeContext = 
Helper.connect();

            // suppress Presentation Autopilot when opening the document
            // properties are the same as described for
            // com.sun.star.document.MediaDescriptor
            PropertyValue[] pPropValues = new PropertyValue[ 1 ];
            pPropValues[ 0 ] = new PropertyValue();
            pPropValues[ 0 ].Name = "Silent";
            pPropValues[ 0 ].Value = new Boolean( true );

            // java.io.File sourceFile = new java.io.File(args[0]);
            java.io.File sourceFile = new java.io.File("prueba_rod2.sxd");
            StringBuffer sUrl = new StringBuffer("file:///");
            sUrl.append(sourceFile.getCanonicalPath().replace('\\', '/'));

            xComponent = Helper.createDocument( xOfficeContext,
                                                sUrl.toString(), "_blank", 0,
                                                pPropValues );

            Object GraphicExportFilter =
                xOfficeContext.getServiceManager().createInstanceWithContext(
                    "com.sun.star.drawing.GraphicExportFilter", xOfficeContext);
            XExporter xExporter = (XExporter)
                UnoRuntime.queryInterface( XExporter.class, GraphicExportFilter 
);

            PropertyValue aProps[] = new PropertyValue[2];
            aProps[0] = new PropertyValue();
            aProps[0].Name = "MediaType";
            aProps[0].Value = "image/png";

            int nPageIndex = Integer.parseInt( args[ 2 ] );
            if ( nPageIndex < PageHelper.getDrawPageCount( xComponent ) &&
                 nPageIndex > 1 )
                        {
                XDrawPage xPage = PageHelper.getDrawPageByIndex( xComponent,
                                                                 nPageIndex );
                XIndexAccess indexAccess = 
(XIndexAccess)UnoRuntime.queryInterface( XIndexAccess.class, xPage );
                for(int i = 0; i < indexAccess.getCount(); i++){
                    XComponent xComp = (XComponent)
                        UnoRuntime.queryInterface( XComponent.class, 
indexAccess.getByIndex(i));
                    xExporter.setSourceDocument( xComp );
                    XFilter xFilter = (XFilter)
                        UnoRuntime.queryInterface( XFilter.class, xExporter );

                    XNamed xNamed = (XNamed)
                        UnoRuntime.queryInterface( XNamed.class, 
indexAccess.getByIndex(i));
                    String graphicName = xNamed.getName();
                    if(graphicName.length() == 0){
                        graphicName = "shape_" + i;
                    }
                    java.io.File destPath = new java.io.File(args[1]);
                    java.net.URL destUrl = destPath.toURL();
                    System.out.println("destUrl.toString(); - " + 
destUrl.toString() + graphicName);
                    aProps[1] = new PropertyValue();
                    aProps[1].Name = "URL";
                    aProps[1].Value = destUrl.toString() + graphicName + ".png";

                    xFilter.filter( aProps );
                    System.out.println( "*** graphics on page \"" + nPageIndex
                                        + "\" from file \"" + 
sourceFile.toString()
                                        + "\" exported under the name \""
                                        + aProps[1].Value + "\" in the local 
directory" );
                }
                        } else
            {
                System.out.println( "page index not in range" );
            }


            // close the document
            com.sun.star.util.XCloseable xCloseable = 
(com.sun.star.util.XCloseable)
                UnoRuntime.queryInterface(com.sun.star.util.XCloseable.class,
                                          xComponent);

            if (xCloseable != null )
                xCloseable.close(false);
            else
                xComponent.dispose();

            System.out.println("*** document closed!");

        }
        catch( Exception ex )
        {
            System.out.println( ex );
        }

        System.exit( 0 );
    }
}


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to