« Return to Thread: I have five text frames on the one page, can I move each frame to a new page?

Re: I have five text frames on the one page, can I move each frame to a new page?

by Fernand Vanrie :: Rate this Message:

Reply to Author | View in Thread

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 :-)
Fernand

> Thanks 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.odt
>
> I 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().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: dev-unsubscribe@...
>>>> For additional commands, e-mail: dev-help@...
>>>>
>>>>
>>>>
>>>>    
>>>>        
>>>  
>>>      
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe@...
>> For additional commands, e-mail: dev-help@...
>>
>>
>>
>>    
>
>  


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@...
For additional commands, e-mail: dev-help@...

 « Return to Thread: I have five text frames on the one page, can I move each frame to a new page?