9 Replies Latest reply on May 23, 2017 4:51 AM by Laubender

    Story.textFrames[0] is not valid

    jakec88782761 Level 1

      Hi everyone,

       

      I'm a little confused about what's happening in my script.

       

      I've split the stories in my document into different arrays depending on their appliedLanguage.

       

      I then have a function that loops through the arrays and searches the contents for a specific phrase.

       

      If the story contains the phrase I am trying to alert:

       

      story.textFrames[0].parentPage
      

       

      However

      story.textFrames[0].isValid
      

      returns false.

       

      So instead I alert:

      story.textContainers[0].constructor.name
      

      which gives me TextFrame.

       

      I then alert:

      story.textContainers[0].parentPage
      

      which gives me a page object.

       

      Why does Story.textFrames[0] not exist?

       

      Thanks

        • 1. Re: Story.textFrames[0] is not valid
          Laubender Adobe Community Professional & MVP

          jakec88782761  wrote

          Why does Story.textFrames[0] not exist?

           

          Thanks

          Hi Jake,

          because with that you address the first anchored text frame in the story.
          And that might not exist.

           

          Stories can flow through text frames and text paths.
          Text containers are arrays that can contain both kind of objects.

           

          Regards,
          Uwe

          1 person found this helpful
          • 2. Re: Story.textFrames[0] is not valid
            Laubender Adobe Community Professional & MVP

            To make it more clear:
            Have a document with one text frame where a text frame is anchored to.

             

            Now run this code:

             

            var story = app.documents[0].stories[0];
            $.writeln(story.id+"\t"+"story.id");
            $.writeln(story.textContainers[0].parentStory.id+"\t"+"story.textContainers[0].parentStory.id");
            $.writeln(story.textFrames[0].parentStory.id+"\t"+"story.textFrames[0].parentStory.id");
            

             

            The result should be something like this:

             

            211    story.id
            211    story.textContainers[0].parentStory.id
            241    story.textFrames[0].parentStory.id
            

             

            Your ID numbers may be different, but the ID number in the first two lines are identical.

            In line 3 of the results you see a different story. The story that is constituted with the anchored text frame.

             

            Regards,
            Uwe

            • 3. Re: Story.textFrames[0] is not valid
              hoa90519171 Level 1

              Return error when performing fourth line "object is invalid", why?

              (執行第四行時回報錯誤"物件無效",為什麼?。)

              Laubender  留言

               

              To make it more clear:
              Have a document with one text frame where a text frame is anchored to.

               

              Now run this code:

               

              var story = app.documents[0].stories[0]; $.writeln(story.id+"\t"+"story.id"); $.writeln(story.textContainers[0].parentStory.id+"\t"+"story.textContainers[0].parentStory.id"); $.writeln(story.textFrames[0].parentStory.id+"\t"+"story.textFrames[0].parentStory.id");

               

              The result should be something like this:

               

              211    story.id 211    story.textContainers[0].parentStory.id 241    story.textFrames[0].parentStory.id

               

              Your ID numbers may be different, but the ID number in the first two lines are identical.

              In line 3 of the results you see a different story. The story that is constituted with the anchored text frame.

               

              Regards,
              Uwe

              • 4. Re: Story.textFrames[0] is not valid
                Laubender Adobe Community Professional & MVP

                I assume:

                Because you have no text frame anchored in your story.


                Try this with a new document where there is one text frame and another one that is anchored to the text of that text frame.
                Put nothing else in that document.

                 

                IMPORTANT EDIT:

                1. Make sure that you first add the text frame that stands alone.
                2. Then add the text frame you like to anchor.
                3. Then anchor the text frame you last build.

                 

                Reason:
                In line 1 of the script we address the story with index number 0 .

                That's the first story in time added to the document.
                And that belongs to the first text frame you added to the document.

                 

                So if you anchored the first text frame to the last text frame you did, you addressed the story of the anchored text frame with variable story.

                 

                You also could do the following:

                Select the text frame where the other one is anchored to and change line 1 of the snippet to:

                 

                var story = app.selection[0].parentStory; 
                

                 

                Sorry for this inconvenience…

                 

                Regards,
                Uwe

                • 5. Re: Story.textFrames[0] is not valid
                  hoa90519171 Level 1

                  You are right, I missed the anchor this step.

                  (你是對的,我漏了錨定這一步。)

                   

                  This is my result:

                  (這是我的結果:)

                   

                   

                  var story = app.documents[0].stories[0];  
                  $.writeln(story.id+"\t"+"story.id");  
                  $.writeln(story.textContainers[0].parentStory.id+"\t"+"story.textContainers[0].parentStory.id");  
                  $.writeln(story.textFrames[0].parentStory.id+"\t"+"story.textFrames[0].parentStory.id");  
                  
                  var myTextFrame = app.documents[0].textFrames[0]
                  $.writeln(myTextFrame.id+"\t"+"myTextFrame.id");  
                  $.writeln(myTextFrame.parentStory.textContainers[0].id+"\t"+"myTextFrame.parentStory.textContainers[0].id");  
                  $.writeln(myTextFrame.parentStory.textFrames[0].id+"\t"+"myTextFrame.parentStory.textFrame.id");  
                  
                  

                   

                  250    story.id

                  250    story.textContainers[0].parentStory.id

                  277    story.textFrames[0].parentStory.id

                  270    myTextFrame.id

                  270    myTextFrame.parentStory.textContainers[0].id

                  274    myTextFrame.parentStory.textFrame.id

                   

                   

                  Thank you

                  (謝謝)

                  • 6. Re: Story.textFrames[0] is not valid
                    jakec88782761 Level 1

                    Hi Uwe,

                     

                    What's the difference between a text frame and a text path?

                     

                    My story is not anchored, but my confusion was that textFrames[0] returns invalid and textContainers[0] returns text frame.

                     

                    So there is a text frame but it's hidden inside a text container?

                     

                    Thanks for your reply.

                    • 7. Re: Story.textFrames[0] is not valid
                      Laubender Adobe Community Professional & MVP

                      Hm…
                      How should I explain that better?

                       

                       

                      Let's try this:
                      All text frames and text paths where a story can flow through are stored only in:
                      Story.textContainers

                       

                      All text frames that are anchored to the story are stored in:
                      Story.textFrames

                       

                      What a text path is?
                      Use the text path tool in InDesign's UI that is available by the flighout menu of the text tool.


                      You could add a text path to any drawn path on the page.
                      It is a path where you can type text into.

                       

                      You could even add a text path to a text frame. So technically this text frame is addressing two stories:
                      textFrame.parentStory
                      textFrame.textPaths[0].parentStory

                       

                      So you see a text path like this has a parentStory which is a normal Story object. You also would be able to thread text frames with text paths and create a story with a textContainers array, that will not only hold text frame objects but also text path objects.

                       

                      Regards,
                      Uwe

                      1 person found this helpful
                      • 8. Re: Story.textFrames[0] is not valid
                        jakec88782761 Level 1

                        Thank you Uwe,

                         

                        I think I understand the underlying structure now.

                         

                        So an "anchored text frame" is a text frame which does not contain a story that flows into other text frames?

                         

                        This was a great explanation of textContainers

                        • 9. Re: Story.textFrames[0] is not valid
                          Laubender Adobe Community Professional & MVP

                          jakec88782761  wrote

                          … So an "anchored text frame" is a text frame which does not contain a story that flows into other text frames?

                           

                          Not quite ;-)

                           

                          When working in the UI, yes:
                          An anchored text frame cannot be part of a story that has more than one textContainers.


                          By scripting one could do a story with several textContainers that are all anchored to different parts of a story.

                          But that's another story… :-)


                          And is not recommended. And a construction like that has its downside.
                          Problems with an IDML roundtrip if I recall right.
                          And perhaps stability problems.

                           

                          Regards,
                          Uwe