Chris Fleischmann wrote:
Here is the output I capture from the println statements:height: 0
= invisible frame
AnchorPageNo: 1 AnchorType: com.sun.star.text.textcontentanchort...@39060b VertOrient: 0 HoriOrient: 0 VertOrientPosition: 0 HoriOrientPosition: 1000 HoriOrientRelation: 8 VertOrientRelation: 8 height: 21500 AnchorPageNo: 2 AnchorType: com.sun.star.text.textcontentanchort...@39060b VertOrient: 0
supposed to be "NONE" ?
HoriOrient: 0 VertOrientPosition: 21500 HoriOrientPosition: 1000 HoriOrientRelation: 8
supposed to be "PAGE_PRINT_AREA"
VertOrientRelation: 8height: 43000
= frame with height off 43 cm , can not been placed
AnchorPageNo: 3 AnchorType: com.sun.star.text.textcontentanchort...@39060b VertOrient: 0 HoriOrient: 0 VertOrientPosition: 43000 HoriOrientPosition: 1000 HoriOrientRelation: 8 VertOrientRelation: 8 Chris Fleischmann wrote:I'm sorry but your last comment lost me... Here is my Java method to create the necessary pages and to move the textframes (well trying to): 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(); 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); xPageCursor.jumpToFirstPage(); xPageCursor.jumpToEndOfPage(); for (int i = 0; i < xIndexAccess.getCount(); 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(); } } xPageCursor.jumpToFirstPage();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); int height = xTextViewCursor_targetDoc.getPosition().Y; xShapeProps[i].setPropertyValue("AnchorPageNo", new Short((short)(i + 1))); System.out.println("AnchorPageNo: " + xShapeProps[i].getPropertyValue("AnchorPageNo")); xShapeProps[i].setPropertyValue("AnchorType", TextContentAnchorType.AT_PAGE); System.out.println("AnchorType: " + xShapeProps[i].getPropertyValue("AnchorType")); xShapeProps[i].setPropertyValue("VertOrient", new Short(VertOrientation.NONE)); System.out.println("VertOrient: " + xShapeProps[i].getPropertyValue("VertOrient")); xShapeProps[i].setPropertyValue("HoriOrient", new Short(HoriOrientation.NONE)); System.out.println("HoriOrient: " + xShapeProps[i].getPropertyValue("HoriOrient"));xShapeProps[i].setPropertyValue("VertOrientPosition", newInteger(height)); System.out.println("VertOrientPosition: " + xShapeProps[i].getPropertyValue("VertOrientPosition")); xShapeProps[i].setPropertyValue("HoriOrientPosition", new Integer(1000)); System.out.println("HoriOrientPosition: " + xShapeProps[i].getPropertyValue("HoriOrientPosition")); xShapeProps[i].setPropertyValue("HoriOrientRelation", new Short(RelOrientation.PAGE_PRINT_AREA)); System.out.println("HoriOrientRelation: " + xShapeProps[i].getPropertyValue("HoriOrientRelation")); xShapeProps[i].setPropertyValue("VertOrientRelation", new Short(RelOrientation.PAGE_PRINT_AREA)); System.out.println("VertOrientRelation: " + xShapeProps[i].getPropertyValue("VertOrientRelation")); // Set the width and height of the shape. xShapeProps[i].setPropertyValue("FrameWidthAbsolute", new Integer(frame_size.Width)); xShapeProps[i].setPropertyValue("FrameHeightAbsolute", new Integer(frame_size.Height)); xShapeProps[i].setPropertyValue("FrameIsAutomaticHeight", new Boolean(false)); xShapeProps[i].setPropertyValue("SizeType", new Short((short)1)); xShapeProps[i].setPropertyValue("LeftBorderDistance", new Integer(200)); xShapeProps[i].setPropertyValue("RightBorderDistance", new Integer(200)); xShapeProps[i].setPropertyValue("TopBorderDistance", new Integer(200)); xShapeProps[i].setPropertyValue("BottomBorderDistance", new Integer(200)); xPageCursor.jumpToNextPage();} catch (Exception e) { System.out.println(e.getMessage()); e.printStackTrace();} } } The pages are created without any issues... The output as per my println statements shows correct page and heights assuming the first page top, left is 0/0. Basically, what I can do is move the text frame without any issues using the VertOrientPosition and HoriOrientPosition as long as the boundaries for the textframe don't go out of the first page... Meaning I can get the textframes to move around on page 1 no problem... but trying to anchor them on to subsequent pages at the same x/y coordinate on the page isn't working. Again, see attached odt. http://www.nabble.com/file/p24177299/test.odttest.odtFernand Vanrie wrote:Chris ,Before you start placing Frames, you must been sure you have already created the right number of pages.anyhow: i placed some code in your documents "standard basic libray module1" this code placed a 1000x1000 frame at the cusor position,you moves your cursor to the right position, or you gives fixed coordinates to replace the cursor position and translates to java :-)FernandThanks for the tips... my method is now; 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(); 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_sourceDoc = xViewCursorSupplier_targetDoc.getViewCursor(); /* XPageCursor xPageCursor = (XPageCursor) UnoRuntime.queryInterface( XPageCursor.class, xTextViewCursor_sourceDoc); */ 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); // Setting the vertical and horizontal position long height = (i * page_size.Height) + 1000; System.out.println("height: " + height); // Setting the vertical and horizontal position xShapeProps[i].setPropertyValue("AnchorPageNo", new Short((short)(i + 1)));xShapeProps[i].setPropertyValue("AnchorType",TextContentAnchorType.AT_PAGE); xShapeProps[i].setPropertyValue("VertOrient", new Short(VertOrientation.NONE)); xShapeProps[i].setPropertyValue("HoriOrient", new Short(HoriOrientation.NONE)); xShapeProps[i].setPropertyValue("VertOrientPosition", new Long(height)); xShapeProps[i].setPropertyValue("HoriOrientPosition", new Integer(1000)); xShapeProps[i].setPropertyValue("HoriOrientRelation", (short)50); xShapeProps[i].setPropertyValue("VertOrientRelation", (short)50); // Set the width and height of the shape. xShapeProps[i].setPropertyValue("FrameWidthAbsolute", new Integer(frame_size.Width)); xShapeProps[i].setPropertyValue("FrameHeightAbsolute", new Integer(frame_size.Height));xShapeProps[i].setPropertyValue("FrameIsAutomaticHeight",new Boolean(false)); xShapeProps[i].setPropertyValue("SizeType", new Short((short)1)); xShapeProps[i].setPropertyValue("LeftBorderDistance", new Integer(200)); xShapeProps[i].setPropertyValue("RightBorderDistance", new Integer(200)); xShapeProps[i].setPropertyValue("TopBorderDistance", new Integer(200)); xShapeProps[i].setPropertyValue("BottomBorderDistance", new Integer(200)); // Insert a paragraph break into the document (not the frame) xText.insertControlCharacter(xTextViewCursor_sourceDoc, ControlCharacter.PARAGRAPH_BREAK, false); XPropertySet xCursorProps = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, xTextViewCursor_sourceDoc); xCursorProps.setPropertyValue("BreakType", com.sun.star.style.BreakType.PAGE_AFTER); xText.insertControlCharacter(xTextViewCursor_sourceDoc, ControlCharacter.PARAGRAPH_BREAK, false); // xTextCursor.collapseToEnd();} catch (Exception e) { System.out.println(e.getMessage()); e.printStackTrace();} } } With your code, are you coming from the "bottom" of your document and working your way up? I also don't believe I need; PositionProtected = False SizeProtected = false ContentProtected = false But still it doesn't work... :(See attachment, http://www.nabble.com/file/p24164747/text.odt text.odtI als notice that there seems to be issues with the longs, ints, shorts etc... as also captured here: http://www.openoffice.org/servlets/ReadMsg?list=dev&msgNo=16089 Any other thoughts? Thanks in advance Fernand Vanrie wrote: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().XiVCpos = 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 = NONEoFrame.VertOrientRelation = PAGE_PRINT_AREA oFrame.HoriOrientRelation = PAGE_PRINT_AREAoText.insertTextContent(oCursor(), oFrame, false) hope i helps FernandHi, 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 thennotice 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 calqulatedfrom 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 Fernandthanks 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: dev-unsubscr...@api.openoffice.org For additional commands, e-mail: dev-h...@api.openoffice.org--------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@api.openoffice.org For additional commands, e-mail: dev-h...@api.openoffice.org--------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@api.openoffice.org For additional commands, e-mail: dev-h...@api.openoffice.org
--------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@api.openoffice.org For additional commands, e-mail: dev-h...@api.openoffice.org