Chris ,

Long is needed because integer is to small and there are different properties who has to been set properly.

Please find the basic code i uses to place Frames without any problem

iPagenr = oViewCursor.page
   iHCpos = oViewCursor.getPosition().X
iVCpos = oViewCursor.getPosition().Y - (30700 * (iPagenr -1)) ' Vieuwcursor rekend steeds van begin van document oFrame.SetPropertyValue("AnchorPageNo", iPagenr)
   oFrame.AnchorType = lAnchor
   oFrame.PositionProtected = False
   oFrame.SizeProtected = false
   oFrame.ContentProtected = false
    oFrame.HoriOrient = NONE
    oFrame.VertOrient = NONE
oFrame.VertOrientRelation = PAGE_PRINT_AREA oFrame.HoriOrientRelation = PAGE_PRINT_AREA

    oText.insertTextContent(oCursor(), oFrame, false)

hope i  helps

Fernand
Hi, Yes, I am trying to calculate the height like so,

(i * page_size.Height) + 1000

The page_size.Height was calculated previously, ie.,

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;


I have also tried the following:

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

        XNameAccess xNamedFrames = xTextFramesSupplier.getTextFrames();

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

        XTextContent xFrameContent[] = new
XTextContent[xIndexAccess.getCount()];
        XPropertySet xShapeProps[] = new
XPropertySet[xIndexAccess.getCount()];

        XText xText = xTextDocument_dest.getText();

        XTextCursor xTextCursor = xText.createTextCursor();

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

                xFrameContent[i] = (XTextContent)textFrame;

                xShapeProps[i] = (XPropertySet)
UnoRuntime.queryInterface(XPropertySet.class, textFrame);

                xShapeProps[i].setPropertyValue("AnchorType",
TextContentAnchorType.AT_PAGE);

                // Setting the vertical and horizontal position
                long height = (i * page_size.Height) + 1000;

                //xShapeProps.setPropertyValue("VertOrient", new
Short(VertOrientation.NONE));
                //xShapeProps.setPropertyValue("HoriOrient", new
Short(HoriOrientation.NONE));
                //xShapeProps.setPropertyValue("HoriOrientPosition", new
Integer(1000));
                xShapeProps[i].setPropertyValue("VertOrientPosition",
height);

                // Set the width and height of the shape.
                //xShapeProps.setPropertyValue("FrameWidthAbsolute", new
Integer(frame_size.Width));
                //xShapeProps.setPropertyValue("FrameHeightAbsolute", new
Integer(frame_size.Height));
                //xShapeProps.setPropertyValue("FrameIsAutomaticHeight", new
Boolean(false));
                //xShapeProps.setPropertyValue("SizeType", new
Short((short)1));

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

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

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

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

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

Which doesn't seem to work either, see attached.

Is there a problem specifying a "long" for the vertical position, rather
than an "Integer", ie., the value when you get to page 3 or 4 is over 32768
pixels high.

Any thoughts, do I have to move the view cursor or something or somehow to
get the anchor on to the next page.. I notice when I try it manually, i need
to "cut" the text frame, move to the next page and paste the frame, I then
notice that the anchor is moved to the right page..
At present, it seems all of the textframes remain on page1 in top/left
corner.

I can happily move the textframes using the above technique around the first
page, but not on to the next page....

Your help is greatly appreciated.

Chris







Fernand Vanrie wrote:
Chris Fleischmann wrote:
I have gotten so far as;

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();

        XTextCursor xTextCursor = xText.createTextCursor();

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

                XTextContent xFrameContent = (XTextContent)textFrame;

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

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

                // Setting the vertical and horizontal position
                int height = (i * page_size.Height) + 1000;

                xShapeProps.setPropertyValue("VertOrient", new
Short(VertOrientation.NONE));
                xShapeProps.setPropertyValue("HoriOrient", new
Short(HoriOrientation.NONE));
                xShapeProps.setPropertyValue("HoriOrientPosition", new
Integer(1000));
                xShapeProps.setPropertyValue("VertOrientPosition", new
Integer(height));

                // Set the width and height of the shape.
                xShapeProps.setPropertyValue("FrameWidthAbsolute", new
Integer(frame_size.Width));
                xShapeProps.setPropertyValue("FrameHeightAbsolute", new
Integer(frame_size.Height));
                xShapeProps.setPropertyValue("FrameIsAutomaticHeight",
new
Boolean(false));
                xShapeProps.setPropertyValue("SizeType", new
Short((short)1));

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

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

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

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

                xText.insertControlCharacter(xTextCursor,
ControlCharacter.PARAGRAPH_BREAK, false);

                xTextCursor.gotoEnd(false);
} catch (Exception e) { System.out.println(e.getMessage()); e.printStackTrace();
            }
        }
    }


Which allows me to grab the existing textfram. I then attempt to change
the
verticial position based on the page size, and once moved add a new page
to
the document and updating the height value for the next frame's
translation...

This doesn't seem to work, ie., the textframe(s) do not move to the next
page, they don't translate, the seem to move down the page by increments
of
1000? Shouldn't the Anchor, AT_PAGE move to the "second", "third" or etc.
etc. page, rather than stick to page 1?
Chris,

AT_PAGE is the only option, but the vertical position is calqulated from the begining off the document, so for every Page you have to ad the hight off every page . And i think a viewCursor gives you information about the pagenr wher the frame is located.

Hope it helps

Fernand
thanks for any help you may be able to shed.



Chris Fleischmann wrote:
Hello folks, I have TextFrames, that are created like so (at the
beginning
of the process):

private XText getTextFrame(XText xText, int x, int y) {
        try {
            Object textFrame =
xWriterFactory.createInstance("com.sun.star.text.TextFrame");

            XTextContent xTextContentFrame = (XTextContent)
UnoRuntime.queryInterface(XTextContent.class, textFrame);

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

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

            // Setting the vertical and horizontal position
            xShapeProps.setPropertyValue("VertOrient", new
Short(VertOrientation.NONE));
            xShapeProps.setPropertyValue("HoriOrient", new
Short(HoriOrientation.NONE));
            xShapeProps.setPropertyValue("VertOrientPosition", new
Integer(x));
            xShapeProps.setPropertyValue("HoriOrientPosition", new
Integer(y));

            // Set the width and height of the shape.
            xShapeProps.setPropertyValue("FrameWidthAbsolute", new
Integer(frame_size.Width));
            xShapeProps.setPropertyValue("FrameHeightAbsolute", new
Integer(frame_size.Height));
            xShapeProps.setPropertyValue("FrameIsAutomaticHeight", new
Boolean(false));
            xShapeProps.setPropertyValue("SizeType", new
Short((short)1));

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

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

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

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

        return null;
    }

This method seems to work, it creates the textframe with a specific
size,
at a specific x/y location.

I am now attempting to iterate over the "said" textframes like so:

XTextFramesSupplier xTextFramesSupplier = (XTextFramesSupplier)
                UnoRuntime.queryInterface(XTextFramesSupplier.class,
xWriterComponent_dest);

        XNameAccess xNamedFrames = xTextFramesSupplier.getTextFrames();
String[] textframes = xNamedFrames.getElementNames();

        for (int i = 0; i < textframes.length; i++) {
            XTextFrame textframe = null;

            try {
                textframe =
(XTextFrame)xNamedFrames.getByName(textframes[i]);

                XTextContent xFrameContent = (XTextContent)
UnoRuntime.queryInterface(XTextContent.class, textframe);

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

Which seems to work, ie., i can iterate over the above "said" frames....
I
have tried doing:

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

                // Setting the vertical and horizontal position
                xShapeProps.setPropertyValue("VertOrient", new
Short(VertOrientation.NONE));
                xShapeProps.setPropertyValue("HoriOrient", new
Short(HoriOrientation.NONE));
                xShapeProps.setPropertyValue("VertOrientPosition", new
Integer(1000 + (i * 1000)));
                xShapeProps.setPropertyValue("HoriOrientPosition", new
Integer(1000));

so as to move the frames slowly but sure down the page....

That doesn't seem to work?

Secondly, is there a way to create a new page between each cycle so that
I
can move the textframe to the new page with the same, x/y origin?

Thanks in advance for any help you can shed on the issue,

Chris
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]






---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to