Issue 103356 - Saving to MS Word not work when you have an embedded background image for a TextFrame anchoring an embedded TextGraphicObject image.
Summary: Saving to MS Word not work when you have an embedded background image for a T...
Status: CLOSED DUPLICATE of issue 32638
Alias: None
Product: Writer
Classification: Application
Component: save-export (show other issues)
Version: OOO310m11
Hardware: Mac All
: P2 Trivial (vote)
Target Milestone: ---
Assignee: writerneedsconfirm
QA Contact: issues@sw
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2009-07-06 14:08 UTC by cfleisch
Modified: 2009-07-06 15:34 UTC (History)
1 user (show)

See Also:
Issue Type: DEFECT
Latest Confirmation in: ---
Developer Difficulty: ---


Attachments
Error when opening file in MS Word 2008 (MAC) (406.46 KB, image/jpeg)
2009-07-06 14:10 UTC, cfleisch
no flags Details
Working in OpenOffice 3.1m11 (163.25 KB, image/jpeg)
2009-07-06 14:10 UTC, cfleisch
no flags Details
Java Use Case. (29.16 KB, text/plain)
2009-07-06 14:12 UTC, cfleisch
no flags Details

Note You need to log in before you can comment on or make changes to this issue.
Description cfleisch 2009-07-06 14:08:18 UTC
Hello Folks, I am using OpenOffice 3.1.0 M11 on an Intel based Mac. I have 4 gig
of RAM and 45GB of spare HDD.

What I have found is that if you specify an embedded background image for a
textframe and then add a TextGraphicObject to it, anchored to a paragraph within
the textframe (again as an embedded graphic object). Saving to Microsoft Word
(97/2000/XP) fails with the error:

"There is not enough memory or disk space to display or print the picture"

If I choose to not embed the graphic image for the textGraphicObject, the Save
As option works. It's only when the TextFrame has an embedded background image
along with embedding an object in the textframe.

Below is some sample code demonstrating this issue.:


package org.openoffice.sdk.example.text;

import com.sun.star.awt.FontWeight;
import com.sun.star.awt.Size;
import com.sun.star.beans.Property;
import com.sun.star.beans.PropertyValue;
import com.sun.star.beans.XPropertySet;
import com.sun.star.beans.XPropertySetInfo;
import com.sun.star.container.XIndexAccess;
import com.sun.star.container.XNameAccess;
import com.sun.star.container.XNameContainer;
import com.sun.star.datatransfer.XTransferable;
import com.sun.star.datatransfer.XTransferableSupplier;
import com.sun.star.drawing.XShape;
import com.sun.star.frame.XComponentLoader;
import com.sun.star.frame.XController;
import com.sun.star.frame.XStorable;
import com.sun.star.lang.XComponent;
import com.sun.star.lang.XMultiComponentFactory;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.style.GraphicLocation;
import com.sun.star.style.XStyleFamiliesSupplier;
import com.sun.star.table.BorderLine;
import com.sun.star.text.ControlCharacter;
import com.sun.star.text.HoriOrientation;
import com.sun.star.text.TextContentAnchorType;
import com.sun.star.text.VertOrientation;
import com.sun.star.text.XPageCursor;
import com.sun.star.text.XParagraphCursor;
import com.sun.star.text.XText;
import com.sun.star.text.XTextContent;
import com.sun.star.text.XTextCursor;
import com.sun.star.text.XTextDocument;
import com.sun.star.text.XTextFrame;
import com.sun.star.text.XTextFramesSupplier;
import com.sun.star.text.XTextGraphicObjectsSupplier;
import com.sun.star.text.XTextViewCursor;
import com.sun.star.text.XTextViewCursorSupplier;
import com.sun.star.text.XWordCursor;
import com.sun.star.uno.Any;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.uno.XComponentContext;
import com.sun.star.util.XCloseable;
import java.math.BigInteger;
import java.security.MessageDigest;
import ooo.connector.BootstrapSocketConnector;

public class TextDocumentStructure5 {
    private XTextDocument xTextDocument_src;
    private XTextDocument xTextDocument_dest;
    private XMultiServiceFactory xWriterFactory_src;
    private XMultiServiceFactory xWriterFactory_dest;
    private XComponent xWriterComponent_src;
    private XComponent xWriterComponent_dest;
    private Size page_size;
    private Size frame_size;

    public static void main(String args[]) {
        TextDocumentStructure5 tds = new TextDocumentStructure5();

        tds.copyContents();

        tds.moveTextFrames();

        // tds.saveFile();

        System.exit(1);
    }

    public TextDocumentStructure5() {
        String oooExeFolder = "/Applications/OpenOffice.org.app/Contents/MacOS";

        try {
            // get the remote office component context
            XComponentContext xRemoteContext =
BootstrapSocketConnector.bootstrap(oooExeFolder);
            //XComponentContext xRemoteContext = Bootstrap.bootstrap();

            if (xRemoteContext == null) {
                System.err.println("ERROR: Could not bootstrap default Office.");
            }

            XMultiComponentFactory xRemoteServiceManager =
                    xRemoteContext.getServiceManager();

            Object desktop =
                    xRemoteServiceManager.createInstanceWithContext(
                    "com.sun.star.frame.Desktop", xRemoteContext);

            XComponentLoader xComponentLoader =
                    (XComponentLoader)
UnoRuntime.queryInterface(XComponentLoader.class, desktop);

            /*
            XStringSubstitution xStringSubstitution = (XStringSubstitution)
             UnoRuntime.queryInterface(
                 XStringSubstitution.class,
                 xRemoteServiceManager.createInstanceWithContext(
                     "com.sun.star.util.PathSubstitution", xRemoteContext));

            String tempDir =
xStringSubstitution.getSubstituteVariableValue("$(temp)");
            */

            PropertyValue[] loadProps = new PropertyValue[0];

            xWriterComponent_src =
                    xComponentLoader.loadComponentFromURL("private:factory/swriter",
                    "_blank", 0, loadProps);

            xWriterComponent_dest =
                    xComponentLoader.loadComponentFromURL("private:factory/swriter",
                    "_blank", 0, loadProps);

            xTextDocument_src =
                    (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class,
                    xWriterComponent_src);

            xTextDocument_dest =
                    (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class,
                    xWriterComponent_dest);

            // get internal service factory of the document
            xWriterFactory_src = (XMultiServiceFactory) UnoRuntime.queryInterface(
                    XMultiServiceFactory.class, xWriterComponent_src);

            xWriterFactory_dest = (XMultiServiceFactory) UnoRuntime.queryInterface(
                    XMultiServiceFactory.class, xWriterComponent_dest);

            XStyleFamiliesSupplier xSupplier = (XStyleFamiliesSupplier) 
                    UnoRuntime.queryInterface(XStyleFamiliesSupplier.class,
xTextDocument_dest);

            // get the NameAccess interface from the Style family collection
            XNameAccess xNameAccess = xSupplier.getStyleFamilies();

            XNameContainer xPageStyleCollection = (XNameContainer)
                    UnoRuntime.queryInterface(XNameContainer.class,
xNameAccess.getByName(
                    "PageStyles"));

            // create a PropertySet to set the properties for the new Pagestyle
            XPropertySet xPropertySet = (XPropertySet)
UnoRuntime.queryInterface(XPropertySet.class,
                    xPageStyleCollection.getByName("Default"));

            // Flip the size
            page_size = (Size) xPropertySet.getPropertyValue("Size");

            int height = page_size.Height;
            page_size.Height = page_size.Width;
            page_size.Width = height;

            xPropertySet.setPropertyValue("Size", page_size);

            // Switch the orientation
            xPropertySet.setPropertyValue("IsLandscape", new Boolean(true));
            xPropertySet.setPropertyValue("LeftMargin", new Short((short) 0));
            xPropertySet.setPropertyValue("RightMargin", new Short((short) 0));
            xPropertySet.setPropertyValue("TopMargin", new Short((short) 0));
            xPropertySet.setPropertyValue("BottomMargin", new Short((short) 0));

            xSupplier = (XStyleFamiliesSupplier)
                    UnoRuntime.queryInterface(XStyleFamiliesSupplier.class,
xTextDocument_src);

            // get the NameAccess interface from the Style family collection
            xNameAccess = xSupplier.getStyleFamilies();

            xPageStyleCollection = (XNameContainer)
                    UnoRuntime.queryInterface(XNameContainer.class,
xNameAccess.getByName(
                    "PageStyles"));

            // create a PropertySet to set the properties for the new Pagestyle
            xPropertySet = (XPropertySet)
UnoRuntime.queryInterface(XPropertySet.class,
                    xPageStyleCollection.getByName("Default"));

            xPropertySet.setPropertyValue("LeftMargin", new Short((short) 0));
            xPropertySet.setPropertyValue("RightMargin", new Short((short) 0));
            xPropertySet.setPropertyValue("TopMargin", new Short((short) 0));
            xPropertySet.setPropertyValue("BottomMargin", new Short((short) 0));

            frame_size = new Size();

            frame_size.Height = page_size.Height - 2000;
            frame_size.Width = (page_size.Width / 2) - 2000;

            // create some example data
            XText xText = xTextDocument_src.getText();
            
            createExampleData(xText);

            XTextCursor xTextCursor = xText.createTextCursor();
            xTextCursor.gotoEnd(false);

            xText.insertControlCharacter(xTextCursor,
com.sun.star.text.ControlCharacter.APPEND_PARAGRAPH, false);

            loadJpgImage(xText,
"file:///Users/chrisf/Pictures/sakura1600_2.jpg", 4000, 4000);

            xText.insertControlCharacter(xTextCursor,
com.sun.star.text.ControlCharacter.APPEND_PARAGRAPH, false);
            
        } catch (Exception e) {
            e.printStackTrace(System.err);
        }
    }

    private void moveTextFrames() {
        XTextFramesSupplier xTextFramesSupplier = (XTextFramesSupplier)
                UnoRuntime.queryInterface(XTextFramesSupplier.class,
xWriterComponent_dest);

        XNameAccess xNamedFrames = xTextFramesSupplier.getTextFrames();

        XIndexAccess xIndexAccess = (XIndexAccess)
                UnoRuntime.queryInterface(
                XIndexAccess.class, xNamedFrames);

        XText xText = xTextDocument_dest.getText();

        XController xController_targetDoc =
xTextDocument_dest.getCurrentController();

        // the cursor for the source document
        XTextViewCursorSupplier xViewCursorSupplier_targetDoc =
                (XTextViewCursorSupplier)
                UnoRuntime.queryInterface(XTextViewCursorSupplier.class,
                xController_targetDoc);

        //selecting the whole source document
        XTextViewCursor xTextViewCursor_targetDoc =
                xViewCursorSupplier_targetDoc.getViewCursor();

        XPageCursor xPageCursor =
                (XPageCursor) UnoRuntime.queryInterface(
                XPageCursor.class,
                xTextViewCursor_targetDoc);

        try {
            XNameContainer xBitmapContainer = (XNameContainer)
UnoRuntime.queryInterface(
                    XNameContainer.class, xWriterFactory_dest.createInstance(
                    "com.sun.star.drawing.BitmapTable"));

            XTextGraphicObjectsSupplier os =
                (XTextGraphicObjectsSupplier) UnoRuntime.queryInterface(
                        XTextGraphicObjectsSupplier.class, xTextDocument_dest);

            XNameAccess as = os.getGraphicObjects();

            if ((as != null) && (as.hasElements())) {
                String names[] = as.getElementNames();

                for (int i = 0; i < names.length; i++) {
                    Object o = (Object) as.getByName(names[i]);

                    XTextContent xTCGraphicObject = (XTextContent)
                            UnoRuntime.queryInterface(XTextContent.class, o);

                    XPropertySet xProps = (XPropertySet)
                            UnoRuntime.queryInterface(XPropertySet.class,
xTCGraphicObject);

                    String url = (String)xProps.getPropertyValue("GraphicURL");
                    Integer width = (Integer)xProps.getPropertyValue("Width");
                    Integer height = (Integer)xProps.getPropertyValue("Height");

                    // helper-stuff to let OOo create an internal name of the
graphic
                    // that can be used later (internal name consists of various
checksums)
                    MessageDigest md = MessageDigest.getInstance("MD5");
                    md.update(url.getBytes(), 0, url.length());

                    String internalName = new BigInteger(1,
md.digest()).toString(16);

                    xBitmapContainer.insertByName(internalName, url);

                    String internalURL =
(String)(xBitmapContainer.getByName(internalName));

                   
xTextViewCursor_targetDoc.gotoRange(xTCGraphicObject.getAnchor(), false);

                    XTextContent xNewTextContent = (XTextContent)
UnoRuntime.queryInterface(
                            XTextContent.class, xWriterFactory_dest.createInstance(
                            "com.sun.star.text.TextGraphicObject"));

                    xProps = (XPropertySet)
                            UnoRuntime.queryInterface(XPropertySet.class,
xNewTextContent);

                    // Not working with the Save AS option to MS Word.
                    //xProps.setPropertyValue("GraphicURL", internalURL); // <--
THIS DOESN"T WORK!
                    xProps.setPropertyValue("GraphicURL", url); // <-- THIS
WORKS, ie., a LINKED IMAGE!
                    xProps.setPropertyValue("Width", new Integer((int)(width)));
                    xProps.setPropertyValue("Height", new Integer((int)(height)));
                    
                    xProps.setPropertyValue("AnchorType",
TextContentAnchorType.AT_PARAGRAPH);

                    xTextViewCursor_targetDoc.getText().insertTextContent(
                            xTextViewCursor_targetDoc, xNewTextContent, false);

                    xText.removeTextContent(xTCGraphicObject);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        xText = xTextDocument_dest.getText();

        float frame_count = xIndexAccess.getCount();
        frame_count = frame_count / 2; // 2 frames per page.

        while (frame_count % 2 != 0) {
            frame_count++;
        }

        xPageCursor.jumpToFirstPage();
        xPageCursor.jumpToEndOfPage();

        for (int i = 1; i < frame_count; i++) {
            try {
                xPageCursor.jumpToLastPage();
                xPageCursor.jumpToEndOfPage();

                // Insert a paragraph break into the document (not the frame)
                xText.insertControlCharacter(xTextViewCursor_targetDoc,
ControlCharacter.PARAGRAPH_BREAK, false);

                XPropertySet xCursorProps =
(XPropertySet)UnoRuntime.queryInterface(XPropertySet.class,
xTextViewCursor_targetDoc);

                xCursorProps.setPropertyValue("BreakType",
com.sun.star.style.BreakType.PAGE_AFTER);

                xText.insertControlCharacter(xTextViewCursor_targetDoc,
ControlCharacter.PARAGRAPH_BREAK, false);
            } catch (Exception e) {
                System.out.println(e.getMessage());

                e.printStackTrace();
            }
        }

        XTextFrame xTextFrame;//[] = new XTextFrame[xIndexAccess.getCount()];
        XPropertySet xShapeProps;//[] = new XPropertySet[xIndexAccess.getCount()];
        Object textFrame;//[] = new Object[xIndexAccess.getCount()];
        Any xImageAny;//[] = new Any[xIndexAccess.getCount()];

        xPageCursor.jumpToFirstPage();

        for (int i = 0; i < xIndexAccess.getCount(); i+= 2) {
            try {
                xImageAny = (Any) xIndexAccess.getByIndex(i);
                textFrame = xImageAny.getObject();

                xTextFrame = (XTextFrame)textFrame;

                XText xFrameText = (XText)
UnoRuntime.queryInterface(XText.class, textFrame);

                xShapeProps = (XPropertySet)
UnoRuntime.queryInterface(XPropertySet.class, xTextFrame);

                xShapeProps.setPropertyValue("AnchorPageNo", new
Short(xPageCursor.getPage()));
                xShapeProps.setPropertyValue("AnchorType",
TextContentAnchorType.AT_PAGE);

                xShapeProps.setPropertyValue("HoriOrient", new
Short(HoriOrientation.NONE));
                xShapeProps.setPropertyValue("VertOrient", new
Short(VertOrientation.NONE));

                // Setting the vertical and horizontal position
                xShapeProps.setPropertyValue("HoriOrientPosition", new
Integer(1000));
                xShapeProps.setPropertyValue("VertOrientPosition", new
Integer(1000));

                xShapeProps.setPropertyValue("FrameIsAutomaticHeight", new
Boolean(false));

                xShapeProps.setPropertyValue("LeftBorderDistance", new
Integer(300));
                xShapeProps.setPropertyValue("RightBorderDistance", new
Integer(300));
                xShapeProps.setPropertyValue("TopBorderDistance", new Integer(300));
                xShapeProps.setPropertyValue("BottomBorderDistance", new
Integer(300));

                if ((i + 1) < xIndexAccess.getCount()) {
                    int x = i + 1;

                    xImageAny = (Any) xIndexAccess.getByIndex(x);
                    textFrame = xImageAny.getObject();

                    xTextFrame = (XTextFrame)textFrame;

                    xFrameText = (XText) UnoRuntime.queryInterface(XText.class,
textFrame);

                    xShapeProps = (XPropertySet)
UnoRuntime.queryInterface(XPropertySet.class, xTextFrame);

                    xShapeProps.setPropertyValue("AnchorPageNo", new
Short(xPageCursor.getPage()));
                    xShapeProps.setPropertyValue("AnchorType",
TextContentAnchorType.AT_PAGE);

                    xShapeProps.setPropertyValue("HoriOrient", new
Short(HoriOrientation.NONE));
                    xShapeProps.setPropertyValue("VertOrient", new
Short(VertOrientation.NONE));

                    // Setting the vertical and horizontal position
                    xShapeProps.setPropertyValue("HoriOrientPosition", new
Integer((page_size.Width / 2) + 1000));
                    xShapeProps.setPropertyValue("VertOrientPosition", new
Integer(1000));

                    xShapeProps.setPropertyValue("FrameIsAutomaticHeight", new
Boolean(false));

                    xShapeProps.setPropertyValue("LeftBorderDistance", new
Integer(300));
                    xShapeProps.setPropertyValue("RightBorderDistance", new
Integer(300));
                    xShapeProps.setPropertyValue("TopBorderDistance", new
Integer(300));
                    xShapeProps.setPropertyValue("BottomBorderDistance", new
Integer(300));
                }

                xPageCursor.jumpToNextPage();
                xPageCursor.jumpToStartOfPage();
            } catch (Exception e) { 
                System.out.println(e.getMessage());
                
                e.printStackTrace();
            }
        }
    }

    private XText getTextFrame(XText xText) {
        try {
            Object textFrame =
xWriterFactory_dest.createInstance("com.sun.star.text.TextFrame");

            XTextFrame xTextFrame = (XTextFrame)
UnoRuntime.queryInterface(XTextFrame.class, textFrame);

            XShape xShape = (XShape) UnoRuntime.queryInterface(XShape.class,
xTextFrame);
            
            xShape.setSize(new Size(frame_size.Width, frame_size.Height));

            XPropertySet xShapeProps = (XPropertySet)
UnoRuntime.queryInterface(XPropertySet.class, xTextFrame);

            BorderLine aBorderLine = new BorderLine();
            aBorderLine.OuterLineWidth = 1;
            aBorderLine.Color = new Integer(0xFFFFFF);
            
            xShapeProps.setPropertyValue("TopBorder", aBorderLine);
            xShapeProps.setPropertyValue("BottomBorder", aBorderLine);
            xShapeProps.setPropertyValue("LeftBorder", aBorderLine);
            xShapeProps.setPropertyValue("RightBorder", aBorderLine);

            xShapeProps.setPropertyValue("AnchorType",
TextContentAnchorType.AT_PAGE);

            // Setting the vertical and horizontal position
            xShapeProps.setPropertyValue("FrameIsAutomaticHeight", new
Boolean(false));

            xShapeProps.setPropertyValue("VertOrient", new
Short(VertOrientation.NONE));
            xShapeProps.setPropertyValue("HoriOrient", new
Short(HoriOrientation.NONE));

            xShapeProps.setPropertyValue("VertOrientPosition", new Integer(1000));
            xShapeProps.setPropertyValue("HoriOrientPosition", new Integer(1000));

            xShapeProps.setPropertyValue("LeftBorderDistance", new Integer(0));
            xShapeProps.setPropertyValue("RightBorderDistance", new Integer(0));
            xShapeProps.setPropertyValue("TopBorderDistance", new Integer(0));
            xShapeProps.setPropertyValue("BottomBorderDistance", new Integer(0));

            XNameContainer xBitmapContainer = (XNameContainer)
UnoRuntime.queryInterface(
                    XNameContainer.class, xWriterFactory_dest.createInstance(
                    "com.sun.star.drawing.BitmapTable"));

            String backgroundImageURL =
"file:///Users/chrisf/NetBeansProjects/WebApplication2/web/Shared/images/border6.jpg";

            // helper-stuff to let OOo create an internal name of the graphic
            // that can be used later (internal name consists of various checksums)
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(backgroundImageURL.getBytes(), 0,
backgroundImageURL.length());

            String internalName = new BigInteger(1, md.digest()).toString(16);

            xBitmapContainer.insertByName(internalName, backgroundImageURL);

            String internalURL = (String)(xBitmapContainer.getByName(internalName));

            xShapeProps.setPropertyValue("BackGraphicURL", internalURL);
            xShapeProps.setPropertyValue("BackGraphicLocation",
GraphicLocation.AREA);

            XPropertySetInfo xPropertySetInfo = xShapeProps.getPropertySetInfo();

            Property property[] = xPropertySetInfo.getProperties();

            for (int i = 0; i < property.length; i++) {
                try {
                    System.out.println(property[i].Name + ": " +
                            xShapeProps.getPropertyValue(property[i].Name));
                } catch (Exception e) { }
            }

            xText.insertTextContent(xText.getEnd(), xTextFrame, false);

            xBitmapContainer.removeByName(internalName);

            XText xFrameText = (XText) UnoRuntime.queryInterface(XText.class,
textFrame);

            return xFrameText;
        } catch (java.lang.Exception e) {
            e.printStackTrace();
        }

        return null;
    }

    private void copyContents() {
        try {
            //the controllers
            XController xController_sourceDoc =
xTextDocument_src.getCurrentController();
            XController xController_targetDoc =
xTextDocument_dest.getCurrentController();

            // the cursor for the source document
            XTextViewCursorSupplier xViewCursorSupplier_sourceDoc =
                    (XTextViewCursorSupplier)
                    UnoRuntime.queryInterface(XTextViewCursorSupplier.class,
                    xController_sourceDoc);

            //selecting the whole source document
            XTextViewCursor xTextViewCursor_sourceDoc =
                    xViewCursorSupplier_sourceDoc.getViewCursor();

            XPageCursor xPageCursor =
                    (XPageCursor) UnoRuntime.queryInterface(
                    XPageCursor.class,
                    xTextViewCursor_sourceDoc);

            XStyleFamiliesSupplier xSupplier = (XStyleFamiliesSupplier)
                    UnoRuntime.queryInterface(XStyleFamiliesSupplier.class,
xTextDocument_dest);

            // get the NameAccess interface from the Style family collection
            XNameAccess xNameAccess = xSupplier.getStyleFamilies();

            XNameContainer xPageStyleCollection = (XNameContainer)
                    UnoRuntime.queryInterface(XNameContainer.class,
xNameAccess.getByName(
                    "ParagraphStyles"));

            // create a PropertySet to set the properties for the new Pagestyle
            XPropertySet xPropertySet = (XPropertySet)
UnoRuntime.queryInterface(XPropertySet.class,
                    xPageStyleCollection.getByName("Default"));

            Float charHeight = (Float)xPropertySet.getPropertyValue("CharHeight");
            //Integer paraTopMargin =
(Integer)xPropertySet.getPropertyValue("ParaTopMargin");
            //Integer paraBottomMargin =
(Integer)xPropertySet.getPropertyValue("ParaBottomMargin");

            int page_height = page_size.Width;
            int frame_height = frame_size.Height;
            
            float ratio_y = ((float)frame_height - 2000) / (float)page_height;

            // Switch the orientation
            short charHeight2 = (short)(charHeight.floatValue() * ratio_y);
            
            xPropertySet.setPropertyValue("CharHeight", new Short(charHeight2));

            // select the current page of document with the cursor
            xPageCursor.jumpToLastPage();
            xPageCursor.jumpToEndOfPage();

            int currentPage = xPageCursor.getPage();

            //getting the data supplier of our source doc
            XTransferableSupplier xTransferableSupplier_sourceDoc;
            XTransferableSupplier xTransferableSupplier_targetDoc;
            XTextViewCursorSupplier xViewCursorSupplier_targetDoc;
            XTextViewCursor xTextViewCursor_targetDoc;
            XTransferable xTransferable;

            do {
                while (xPageCursor.getPage() == currentPage) {
                    if (!xTextViewCursor_sourceDoc.goLeft((short)1, true)) {
                        break;
                    }
                }
                
                //getting the data supplier of our source doc
                xTransferableSupplier_sourceDoc =
                        (XTransferableSupplier) UnoRuntime.queryInterface(
                        XTransferableSupplier.class,
                        xController_sourceDoc);

                //saving the selected contents
                xTransferable =
                        xTransferableSupplier_sourceDoc.getTransferable();

                // Create the TextFrame
                XText xText = xTextDocument_dest.getText();
                xText = getTextFrame(xText);

                //getting the data supplier of our target doc
                 xTransferableSupplier_targetDoc =
                        (XTransferableSupplier) UnoRuntime.queryInterface(
                        XTransferableSupplier.class,
                        xController_targetDoc);

                //the cursor for the target document
                xViewCursorSupplier_targetDoc =
                        (XTextViewCursorSupplier)
                        UnoRuntime.queryInterface(XTextViewCursorSupplier.class,
                        xController_targetDoc);

                //going to the end of the source document
                xTextViewCursor_targetDoc =
                        xViewCursorSupplier_targetDoc.getViewCursor();

                xTextViewCursor_targetDoc.gotoRange(xText.getEnd(), false);

                // inserting the source document there
                xTransferableSupplier_targetDoc.insertTransferable(xTransferable);

                // RESET cursor and page.
                xTextViewCursor_sourceDoc.goRight((short)1, false);

                xPageCursor.jumpToPreviousPage();
                xPageCursor.jumpToEndOfPage();
            } while (--currentPage > 0);

        } catch (Exception e) {
            e.printStackTrace(System.err);
        }
    }

    private void saveFile() {
        try {
            XStorable xStorable =
            (XStorable)UnoRuntime.queryInterface(XStorable.class,
xTextDocument_dest);

            PropertyValue[] storeProps = new PropertyValue[1];
            storeProps[0] = new PropertyValue();
            //storeProps[0].Name = "FilterName";
            //storeProps[0].Value = "MS Word 97";

            xStorable.storeAsURL("file:///Users/chrisf/Documents/test.odt",
storeProps);

            XCloseable xcloseable = (XCloseable) UnoRuntime.queryInterface(
                    XCloseable.class, xTextDocument_dest);

            xcloseable.close(false);

            xcloseable = (XCloseable) UnoRuntime.queryInterface(
                    XCloseable.class, xTextDocument_src);

            xcloseable.close(false);

        } catch (java.lang.Exception e) {
            e.printStackTrace();
        }
    }

    protected void createExampleData(com.sun.star.text.XText xText) {
        try {
            for (int i = 0; i < 6; i++) {
                for (int j = 0; j < 1000; j++) {
                    xText.insertString(xText.getEnd(), String.valueOf(j) + " ",
false);
                }
                
                xText.insertControlCharacter(xText.getEnd(),
ControlCharacter.PARAGRAPH_BREAK, false);
            }

            XWordCursor xWordCursor =
                    (XWordCursor) UnoRuntime.queryInterface(
                    XWordCursor.class, xText.getStart());

            xWordCursor.gotoNextWord(false);
            xWordCursor.gotoNextWord(false);
            xWordCursor.gotoEndOfWord(true);

            XPropertySet xPropertySet =
                    (XPropertySet) UnoRuntime.queryInterface(
                    XPropertySet.class, xWordCursor);

            xPropertySet.setPropertyValue("CharWeight",  new
Float(FontWeight.BOLD));
        } catch (Exception e) {
            e.printStackTrace(System.err);
        }
    }

    protected void loadJpgImage(XText xText, String strImgFileName, int width,
int height) {
        try {
            Object newImage =
xWriterFactory_src.createInstance("com.sun.star.text.TextGraphicObject" );
            XTextContent xNewTextContent = ( XTextContent )
UnoRuntime.queryInterface(XTextContent.class, newImage);

            XTextCursor xTextCursor = xText.createTextCursor();

            xTextCursor.gotoEnd(false);

            xText.insertTextContent( xTextCursor, xNewTextContent, false);

            XPropertySet xProps = (XPropertySet)
UnoRuntime.queryInterface(XPropertySet.class, newImage);

            int page_height = page_size.Width;
            int page_width = page_size.Height;

            int frame_height = frame_size.Height;
            int frame_width = frame_size.Width;

            float ratio_x = ((float)frame_height) / (float)page_height;
            float ratio_y = ((float)frame_width) / (float)page_width;

            float ratio = 1;

            if (ratio_x < ratio_y) {
                ratio = ratio_x;
            } else {
                ratio = ratio_y;
            }

            xProps.setPropertyValue("GraphicURL", strImgFileName);
            xProps.setPropertyValue("AnchorType",
TextContentAnchorType.AT_PARAGRAPH);
            xProps.setPropertyValue("Width", new Integer((int)(width * ratio)));
            xProps.setPropertyValue("Height", new Integer((int)(height * ratio)));
        } catch (Exception e) {
            e.printStackTrace();

            System.out.println("Failed to insert Graphic");
        }
    }
}
Comment 1 cfleisch 2009-07-06 14:10:16 UTC
Created attachment 63394 [details]
Error when opening file in MS Word 2008 (MAC)
Comment 2 cfleisch 2009-07-06 14:10:56 UTC
Created attachment 63395 [details]
Working in OpenOffice 3.1m11
Comment 3 cfleisch 2009-07-06 14:12:40 UTC
Created attachment 63396 [details]
Java Use Case.
Comment 4 cfleisch 2009-07-06 14:14:16 UTC
I have also tried opening the *.doc document in MS 2003, 2007, and MAC 2008.

The screenshot, screen 1 is the error seen in Word, the second screen shot is
the openoffice screen capture showing that the object is indeed embedded as it
should and anchored to the paragraph.
Comment 5 michael.ruess 2009-07-06 15:31:54 UTC
Already tracked as issue 32638.
For the future, please do not paste such an amount of Program code into an issue
description - attach as file. Issues will become extremely inconvenient to read
and handle.

*** This issue has been marked as a duplicate of 32638 ***
Comment 6 michael.ruess 2009-07-06 15:34:10 UTC
Closing duplicate.